VBAでいろいろなプロシージャを作成する場合にも、基本的な構文を用います。プロシージャを構成する1行ごとのコードをステートメントと呼びます。そのステートメントには、どのような処理をさせるかという記述方法(構文)があります。一般的によく使われるステートメントの構文を覚えることで、VBAの記述が理解できます。ここでは、よく利用される基本構文を紹介します。
条件によって処理を分岐することができます。例えとして、以下のプロシージャを説明しましょう。
Public Sub test()
Dim P As Integer
P = InputBox("数字を入れてください")
If P >= 10 Then
MsgBox "10以上の数字ですね。"
End If
End Sub
2行目でまず変数Pを宣言しています(データ型は整数型)。
3行目では、入力ボックスを表示させて、ユーザが入力した数字を変数Pに格納します。
4行目で、もし変数Pに格納された数字が「10以上ならば」というステートメントになっていて、それが真(Pが10以上であることが本当)なら、すぐ下(5行目)の処理を行います。つまり、メッセージボックスが表示され、「10以上の数字ですね」というメッセージが表示されます。ただし、もしその条件が満たされていない場合は、何も処理されずにプログラムが終了します。(10未満の数字が入力された場合は、何も実行されない)
6行目のEnd
IFはここで条件分岐の処理(IFステートメント)の終わりを宣言しています。ようするに、IFステートメントの構文の最後には、必ずEnd IFを記述しなければなりません。
単なるIF構文であれば、真の場合しか処理されません。もし、真でなければ違う処理をさせる場合には、Elseを使います。では、例文を見てください。
Public Sub test()
Dim P As Integer
P = InputBox("数字を入れてください")
If P >= 10 Then
MsgBox "10以上の数字ですね。"
Else
MsgBox "10未満の数字ですね。"
End If
End Sub
先ほどのIFステートメントにElse文が追加されただけです。
6行目のElseは、上のステートメントで条件が合わなかった場合は、次の処理をしなさいという意味になります。つまり、10以上の数字が入力ボックスに記述されない場合は、「10未満の数字ですね。」というメッセージを表示させることになります。Elseは条件が偽の場合処理されるステートメントとなります。
分岐がいくつもある場合は、ElseIfを追加することで可能です。下の例を見てください。
Public Sub test()
Dim P As Integer
P = InputBox("数字を入れてください")
If P >= 10 Then
MsgBox "10以上の数字ですね。"
ElseIf P < 9 Then
MsgBox "8以下の数字ですね。"
Else
MsgBox "数字は9ですね。"
End If
End Sub
この例では、9未満の数字が入力されたら、「8以下の数字ですね。」とメッセージが表示され、「9」の数字が入力されたときだけ「数字は9ですね。」と表示されます。Else IFはいくつも追加でき、条件分岐がいくつも設定できます。
IFステートメントなどで、よく利用されるのが変数を評価する際の演算子です。2つの式(変数)や値を比較し、結果が真か偽かを判断し結果を返します。比較演算子には以下のようなものがあります。
演算子 | 真(True) | 偽(False) |
<(より小さい) | A<B | A>=B |
<=(以下) | A<=B | A>B |
>(より大きい) | A>B | A<=B |
>=(以上) | A>=B | A<B |
<>(等しくない) | A<>B | A=B |
=(等しい) | A=B | A<>B |
処理を他方向に分岐させるには、IF文よりも整理されたコードを作成できます。IF文でも多数の分岐処理させることは可能ですが、後から変更、編集する際に分かり難い点がありますので、分岐が多い場合はSelect Caseステートメントを利用します。例を見てください。
Public Sub test()
Dim P As Integer
P = InputBox("数字を入れてください")
Select Case P
Case 1
Msgbox "1が入力されました。"
Case 2
Msgbox "2が入力されました。"
Case 3
Msgbox "3が入力されました。"
Case 4
Msgbox "4が入力されました。"
Case Else
MsgBox "1から4の間で入力してください。"
End Select
End Sub
この例では、変数Pに、1から4までの数字を入れた場合、それに対応した処理を行うように記述されています。「1」を入力されると「1が入力されました。」という具合にですが、1から4以外の数字が入力された場合は、Case Elseステートメントで実行される「1から4の間で入力してください。」というメッセージが表示されます。
Select Caseステートメントは、最初に「式」をチェックし、次にCase節を順番にチェックしていきます。Case節が「式」の値と一致すれば、Case節に記述されている処理を実行します。一致する値に出会うまでこの処理が繰り返されることになり、一致した時点でこのステートメントの処理は終了されます。(この例の式は、「P」です)
条件には数値、文字列、範囲などがあります。それぞれの条件を記述する場合には、ある決まりがあります。しっかりと整理しておきましょう。
あらかじめ指定しておいた回数分だけステートメントを繰り返し実行させます。つまり、ループを実行させることができます。Forの後に何回ループを繰り返させるかを変数を使用して指定します。
Public Sub test()
Dim i As Integer
For i = 1 To 3
MsgBox i & "回目です。"
Next i
End Sub
2行目で変数iを宣言しています。データ型は整数型です。iはよくループ実行の際に使われる変数名です。
3行目で、変数iに「1」を入れて、iが3になるまで以下のステートメントを実行させるようにしています。
要するに、最初変数iに「1」を入れて、メッセージボックスで「1回目です。」と表示させます。Nextに処理が移ると、For文に戻り、次にiに2を入れて、メッセージボックスで「2回目です。」と表示します。これを3回繰り返すための記述となっています。
For i=1 To
3とは、「変数iが1から3になるまで」という指定になります。それを、Nextまでの間に、繰り返したい処理を記述しているのがこの構文の意味になります。
If 「式または変数」「比較演算子」「値」 Then
評価が「真」の時に実行する処理
Else
評価が「偽」の時に事項する処理
End I
Select Case 「式または値」 Then
Case 一番目の条件
一番目の条件が一致した場合の実行処理
Case 二番目の条件
二番目の条件が一致した場合の実行処理
Case 三番目の条件
三番目の条件が一致した場合の実行処理
Case Else
上記のいずれの条件を満たさないときの実行処理
End Select
For 変数=初期値 To 最終値 Step 増分
実行処理
Next
これまで、VBA記述の際の基本部分を紹介してきました。だいたいの記述方法が理解できれば、あとはさまざまなコードを記述していき、操作に慣れていきましょう。