Excel
VBA

VBA の条件分岐

条件分岐

ある条件によって処理を変える場合は条件分岐を使う。

    If 式 Then
        '式が真の時の処理
    End If

偽の処理が必要なら Else を次のように記述する。

    If 式 Then
        '式が真の時の処理
    Else
        '式が偽の時の処理
    End If

もしくは以下のように記述する、否定式が理解しやすい場合のみ使うべきである。

    If 否定式 Then
        '否定式が真の時の処理
    Else
        '否定式が偽の時の処理
    End If

連続して式を評価する場合は次のように記述する。

    If 式 Then
        '式が真の時の処理
    ElseIf 式2 Then
        '式2が真の時の処理
    Else
        '式,式2が偽の時の処理
    End If

多重に書く事も可能である、あまりにも多重な表記は避けるべきである。 (4階層以上はソースから悪い匂いが出るので止めた方が良い、時として焦げたものも喰うのが仕事でもある。)

    If 式 Then
        '式が真の時の処理
        If 式2 Then
            '式2が真の時の処理
        End If
    End If

式は論理式でなくてもよい、式の結果が数値型であるなら得られた値は論理値へ暗黙的に変換されて評価される。 VBA では計算や比較もしない値(例えば 1)だけであっても式である為、次のように書ける。 別段処理上のメリットはないが処理がそこで分かれている事を強調する事が出来る。

    if 1 Then
        '式が真の時の処理
    End if

実行したくない処理はコメントにする事があるが次のようにも書ける。

    if 0 Then
        '実行されない処理
    End if

このように書くメリットは処理が VBA の文法としてチェックされる事にある。

他の言語では空の文字列を False 空でない文字列を True と扱えたりするが VBA は明示的に式で比較する必要がある。

    ' 文字列が空の場合
    If s = "" Then
    End If
    ' 文字列が空でない場合
    If s <> "" Then
    End If

VBA には文字列や数値型等から論理型へ暗黙的変換する規則があり次のようにも書ける。

    If "1" Then
    End If
    If "True" Then
    End If

詳しくは変換規則情報を参照してほしい。

条件分岐が多い場合

条件分岐が多重な場合は記述が楽なる Select 1 記法がある。

    Select Case 式
    Case 1
        ' 式が1の処理
    Case 2, 3
        ' 式が2か3の処理
    Case Is < 5
        ' 式が5未満の処理
    Case 10 To 20 
        ' 式が 10 から 20 の処理
    Case Else
        ' 条件不成立の処理
    End Select

  1. 他の言語では switch case break が使われる。