【Excel VBA】IfやCaseで処理を分岐する

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ステートメンを使った例よりわかりやすくなりました。

まとめ

条件分岐は必須のスキルです。早いうちにマスターしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
目次