VBAには多くのプログラミング言語同様に、IfやCaseステートメントを使って処理を分岐することが出来ます。ここではこれらの使い方について解説します。
If文で処理を分岐する
Ifステートメントを使うと条件が満たされたか同課によって、実行する処理を分岐することが出来ます。
Ifステートメントの最小構成
Ifステートメントの最小構成の構文は次のとおりです。
If 条件式 Then
処理
End If
または、短く次のように記述することもできます。
If 条件式 Then 処理
これらは条件式がTrueと評価された場合、Ifステートメントに記述された処理が実行されます。処理が実行されたあとはIfステートメントの次のステートメントから処理が継続されます。Falseと評価された場合はIfステートメントの処理は実行されず、Ifステートメントの次のステートメントから処理が継続されます。
次のコードはnumが3または7であれば「大当たり」と表示します。
Sub sample()
Dim num As Long
num = 7
If num = 3 Or num = 7 Then
Debug.Print "大当たり"
End If
End Sub
条件式がFalseのときの処理を記述する
条件式がTrueのときの処理とFalseのときの処理を記述するには次の構文を使います。条件式がTrueであれば処理1が実行され、FalseであればElseに記述された処理2の処理が実行されます。
If 条件式 Then
処理1
Else
処理2
End If
または、短く次のように記述することもできます。
If 条件式 Then 処理1 Else 処理2
次のコードはnumが3または7であれば「大当たり」、それ以外は「はずれ」と表示します。
Sub sample()
Dim num As Long
num = 9
If num = 3 Or num = 7 Then
Debug.Print "大当たり"
Else
Debug.Print "はずれ"
End If
End Sub
3つ以上に処理を分岐する
Ifステートメンを使って3つ以上に処理を分岐することもできます。それには次の構文を使います。条件式は条件式1、条件式2、条件式3、…と上から順番に評価されて最初にTrueになったIf節、ElseIf節の処理が実行されます。すべての条件式がFalseとなった場合は最後のElse節の処理が実行されます。
If 条件式1 Then
処理1
ElseIf 条件式2 Then
処理2
ElseIf 条件式3 Then
処理3
...
Else
いずれの条件もTrueとならなかったときの処理
End If
ElseIf節はいくつでも追加することができ、また最後のElse節は省略可能です。
Sub sample()
Dim num As Long
num = 8
If num <= 2 Then
Debug.Print "はずれ"
ElseIf num = 3 Or num = 7 Then
Debug.Print "大当たり"
ElseIf num >= 4 And num <= 6 Then
Debug.Print "小当たり"
ElseIf num > 7 Then
Debug.Print "はずれ"
Else
Debug.Print "ここは選ばれるはずはない。バグです。"
End If
End Sub
Select Case
条件によって処理を分岐するにはSelect Caseステートメントも使えます。構文は次の通りです。
Select Case テスト式
Case 式のリスト1
処理1
Case 式のリスト2
処理2
...
Case Else
処理3
End Select
テスト式は数値または文字列に評価される式です。Caseの後ろには1つ以上の式のリスト(複数指定する場合はカンマで区切る)を記述します。Case Elseは省略可能です。
Caseの式リストは上から順番に評価されます。その結果がテスト式の評価結果と一致すると、そのCaseに続く処理が次のCaseまたはEnd Selectまで実行されます。その後、End Selectの次のステートメントに制御が移ります。Caseの式リストのいずれにも一致しなかった場合、最後のCase Elseの処理が実行されます(Case Elseがなければ、End Selectの次のステートメントに制御が移ります)。
Sub sample()
Dim dayOfWeek As String
dayOfWeek = "Sat"
Select Case dayOfWeek
Case "Mon", "Tue", "Wed", "Thu"
Debug.Print "仕事です。"
Case "Sat", "Sun"
Debug.Print "休みです。"
End Select
End Sub
式のリストには、単純な式以外にも、Toキーワードで値の範囲を指定したり、Isキーワードと比較演算子(IsとLikeを除く)を併用して値の範囲を指定できます。
Sub sample()
Dim num As Long
num = 3
Select Case num
Case Is <= 2
Debug.Print "はずれ"
Case 3, 7
Debug.Print "大当たり"
Case 4 To 6
Debug.Print "小当たり"
Case Is > 7
Debug.Print "はずれ"
Case Else
Debug.Print "ここは選ばれるはずはない。バグです。"
End Select
End Sub
先ほどのIfステートメンを使った例よりわかりやすくなりました。
まとめ
条件分岐は必須のスキルです。早いうちにマスターしましょう。