K-fix Learning & Playing

基礎編


基本となる構文(ステートメント)

VBAでいろいろなプロシージャを作成する場合にも、基本的な構文を用います。プロシージャを構成する1行ごとのコードをステートメントと呼びます。そのステートメントには、どのような処理をさせるかという記述方法(構文)があります。一般的によく使われるステートメントの構文を覚えることで、VBAの記述が理解できます。ここでは、よく利用される基本構文を紹介します。

IFステートメント

条件によって処理を分岐することができます。例えとして、以下のプロシージャを説明しましょう。

                        
        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ステートメント

単なる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は条件が偽の場合処理されるステートメントとなります。

IF~ElseIf~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

Select Caseステートメント

処理を他方向に分岐させるには、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」です)

-補足:Select Caseステートメントでの条件記述の注意点-

条件には数値、文字列、範囲などがあります。それぞれの条件を記述する場合には、ある決まりがあります。しっかりと整理しておきましょう。

数値の場合
Case 100  … そのまま数値を記述する。
文字列の場合
Case "氏名"  … ダブルクォーテーションで囲む。
条件が複数の場合
Case "東京都","名古屋","大阪"  … カンマ(,)で分ける。
ある範囲の数値の場合
Case 1 To 10  … 「To」を間に入れて指定する。(1から10まで)
演算子を用いた場合
Case Is >100  … Isを記述する。ただし、省略してもIsは自動的に追加される。(100より大きい)

Forステートメント

あらかじめ指定しておいた回数分だけステートメントを繰り返し実行させます。つまり、ループを実行させることができます。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ステートメントの書式

If  「式または変数」「比較演算子」「値」  Then

評価が「真」の時に実行する処理

Else

評価が「偽」の時に事項する処理

End I

Select Caseステートメントの書式

Select Case  「式または値」  Then

Case 一番目の条件

一番目の条件が一致した場合の実行処理

Case 二番目の条件

二番目の条件が一致した場合の実行処理

Case 三番目の条件

三番目の条件が一致した場合の実行処理

Case Else

上記のいずれの条件を満たさないときの実行処理

End Select

Forステートメントの書式

For  変数=初期値  To  最終値  Step  増分

実行処理

Next

これまで、VBA記述の際の基本部分を紹介してきました。だいたいの記述方法が理解できれば、あとはさまざまなコードを記述していき、操作に慣れていきましょう。