ExcelVBA 条件分岐

初級VBA

条件分岐

 条件分岐は、プログラムで処理の方向を切り替える役割があります。条件分岐で大事なのは AndOr で2つ以上の条件を組み合わせるような書き方に慣れることです。条件分岐には If 文がよく使われますが、場合によっては Select Case を使った方が見やすくすっきりとした書き方ができるようになります。

If Then

 If 文では、判定する条件を、真(True)か偽(False)で評価します。
真の場合は、If 内になる処理を実行し、偽であれば、実行せずに次に進みます。
判定する条件は、比較演算子を使います。

Sub IfTest()
    Dim age As Long
    age = 19
    If age >= 20 Then
        MsgBox "成年です。"
    ElseIf age < 0 Then
        MsgBox "???"
    Else
        MsgBox "未成年です。"
    End If
End Sub

 最初の If は、「ageが20以上なら」という条件式を調べます。
 次に ElseIf で「ageが 0 未満」という条件式を調べます。このように2つ目以降の条件を調べたい時には ElseIf を重ねます。
 もう一度 If が来ると入れ子状態と判断されます。
 最後にどの条件にも合致しない場合として Else があります。Else は当然ですが条件式はありません。

 If 文は上から順番に条件式を評価していくという点に注意してください。

Sub IfTest2()
    Dim age As Long
    age = 19
    If age < 20 Then
        MsgBox "未成年です。"
    ElseIf age < 0 Then 'ここには絶対来ない
        MsgBox "???"
    Else
        MsgBox "成年です。"
    End If
End Sub

 今度は先に未成年の基準を持ってきましたが、これでは2回目の条件式に来ることはありません。なぜなら20未満なら、最初の条件式で処理を終えてしまうからです。
 このように If 文は条件式の順番に気を付ける必要があります。
では、上のプログラムを直してみます。

Sub IfTest3()
    Dim age As Long
    age = 19
    If age < 20 And age >= 0 Then
        MsgBox "未成年です。"
    ElseIf age < 0 Then
        MsgBox "???"
    Else
        MsgBox "成年です。"
    End If
End Sub

 最初の条件式を「20以上0以下」に変更しました。
 これなら0未満は次の条件式に進めるので問題ないでしょう。 

Select Case

 Select Case を使わなくても If で書けないことはないのですが、場合によってはわかりやすくスッキリ書くことができます。

Sub SelectTest()
    Dim age As Long
    age = 19
    Select Case age
        Case 19
            MsgBox "キャンペーン中です"
        Case 21
            MsgBox "キャンペーン中です"
        Case Else
            MsgBox "通常価格です"
    End Select
End Sub

 この例では、age が 19 と 21 の場合に特定のメッセージを表示するようにしています。最後の End Select どの条件にも合致しない場合です。
実はもっと簡単に書くこともできます。

Sub SelectTest2()
    Dim age As Long
    age = 19
    Select Case age
        Case 19, 21
            MsgBox "キャンペーン中です"
        Case Else
            MsgBox "通常価格です"
    End Select
End Sub

このように書くと、19 か 21 というふうに Or と同じ意味になります。


(☞゚ヮ゚)☞ 次は オブジェクト について学びましょう!

タイトルとURLをコピーしました