トップ > スキル : アプリケーション > VBA for Access > 応用編(VBA基礎知識)
VBにはさまざまな命令構文が用意されています。一般的によく利用される構文に、条件分岐、繰り返し処理があります。これらの構文は、他のプログラミング言語でも多用されています。
条件分岐処理
条件分岐の処理には、IfステートメントとSelect Caseステートメントがあります。どちらも、条件によって処理を分岐するステートメントですが、複数の条件の場合Select Caseステートメントの方が、簡潔で分かりやすく、処理が若干速いという特徴があります。
条件分岐処理 - If文
Ifステートメントには、いくつかの書式があります。
If ~ Then ステートメント
条件が成立する時に処理を実行する書式で、最も単純な条件の時に利用します。
If 条件式 Then 条件式が真(True)の時の処理
(例)
If myBox <= 0 Then MsgBox "0より大きい数字を入力してください"
myBox変数に0以下の数字が格納されていれば、「0より大きい数字を入力してください」というメッセージを表示させます。もし、0より大きい数字であれば、何も処理がされません。つまり、条件が成立しなかった時の処理が不要であり、1行で記述できる特徴があります。
If ~ Then ~ End Ifステートメント
条件が成立する時に処理を実行する書式で、処理を複数行記述する時に利用します。条件分岐の最後は、End Ifを記述する必要があります。
If 条件式 Then 条件式が真(True)の時の処理 条件式が真(True)の時の処理 End If
(例)
If myBox <= 0 Then MsgBox "0以下でしたので、10の値を指定します。" myBox = 10 End If
変数の値が0以下の時、メッセージを表示させて、変数myBoxに「10」を代入する処理を行います。2つ以上の処理を行う場合は、1行で記述できないのでThenで改行し、複数の処理を記述した後、End Ifで条件分岐を終了させます。
If ~ Then ~ Elseステートメント
条件が成立する時の処理と、成立しない時の処理を分けることができます。
If 条件式 Then 条件式が真(True)の時の処理 Else 条件式が偽(False)の時の処理 End If
(例)
If myBox <= 0 Then Forms![F入力画面]![金額].SetFocus MsgBox "金額を入力して下さい。" Else Forms![F入力画面]![税込金額] = myBox * 1.05 End If
変数myBoxの値が0以下であれば、F入力画面フォームの[金額]テキストボックスにカーソルを移動させ、「金額を入力してください。」というメッセージを表示させます。それ以外(0より大きい)であれば、変数myBoxの値に1.05を掛け合わせた結果をF入力画面の[税込金額]テキストボックスに代入します。
このように、条件が成立した場合は、Thenの後に記述し、条件が不成立の処理は、Elseの後に記述します。条件によって2つの処理に分ける場合に利用するステートメントです。
If ~ Then ~ Elseifステートメント
複数(3つ以上)の条件で処理を分岐するには、Elseif…Then節を利用します。このElseif…Thenはいくつでも記述できます。
If 条件式1 Then 条件式1が真(True)の時の処理 Elseif 条件式2 Then 条件式2が真(True)の時の処理 Elseif 条件式3 Then 条件式3が真(True)の時の処理 ・ ・ ・ Else いずれの条件も満たさない(False)時の処理 End If
(例)
If myTensuu > 80 Then MsgBox "よくできました!" Elseif myTensuu > 70 Then MsgBox "もうひと踏ん張りです" Elseif myTensuu >60 Then MsgBox "ギリギリラインです。" Else MsgBox "もっと頑張りましょう!" End If
変数Tensuuの値が80より大きい、80~71、70~61、それ以外の4つの条件を付けてそれぞれの処理(メッセージの内容)を分けています。
処理を複数に分けたい時には、このステートメントを使いますが、条件が多くなればなるほど、見にくくなる欠点があります。
条件分岐処理 - Select Case文
If文のIf…Then…Elseifステートメントは条件によって複数の処理に分ける時に利用しますが、記述に手間がかかり、見直す場合も読みにくい印象があります。
Select Caseステートメントは、If…Then…Elseifステートメントと同じ処理で利用しますが、簡潔に記述でき、その分処理の速度も速くなります。
Select Case ステートメント
複数の条件がある場合、条件式に従って各ステートメントブロックに処理を分岐します。また、Case節はいくつでも記述できます。
Select~Case 条件式 Case 条件1 条件式と条件1が一致した時の処理 Case 条件2 条件式と条件2が一致した時の処理 Case 条件3 条件式と条件3が一致した時の処理 ・ ・ ・ Case Else 値が上記のどの条件も満たされない時の処理 End Select
※Case節の記述方法 ■値が1、2、3のいずれかである場合 → Case 1,2,3 ■値が1から3の間である場合 → Case 1 To 3 ■値が5以上の場合 → Case Is >= 5 ■値がa~zの間のいずれかである場合 → Case "a" to "z"
(例)
Select Case Tensuu Case Is >80 MsgBox "よくできました!" Case Is >70 MsgBox "もうひと踏ん張りです。" Case Is >60 MsgBox "ギリギリラインです。" Case Else MsgBox "もっと頑張りましょう!" End Select
変数Tensuuの値が80より大きい、80~71、70~61、それ以外の4つの条件を付けてそれぞれの処理(メッセージの内容)を分けています。先ほどの、If…Then…Elseifステートメントと同じ処理ですが、Select Caseステートメントの方が、シンプルで読みやすい印象を受けます。
また、これらの複数条件で分岐される場合、上から順番に調べられて、途中の条件が満たされるとその処理が実行され、後の条件は無視されて条件分岐が終了されることに注目をしてください。