Excel VBA を使ったプログラミングでは、条件に応じて処理を分岐させる「IF 文」は欠かせません。
特に、「AかつBなら処理する」「AまたはBなら処理する」といった複数条件 の指定は、実務でもよく使われます。
本記事では、VBA における IF 文での複数条件の考え方・記述方法・注意点 を、具体的なコード例とともに解説します。
目次
基本の IF 文構文
まずは基本構文から確認しましょう。
If 条件 Then
' 条件が真(True)のときの処理
Else
' 条件が偽(False)のときの処理(省略可能)
End If
複数条件の考え方
✅ AND(かつ)の考え方:すべての条件が満たされている場合
If 条件1 And 条件2 Then
✅ OR(または)の考え方:いずれか1つでも条件を満たしていればOK
If 条件1 Or 条件2 Then
AND 条件の実例:2つの条件がそろったら実行
Sub CheckPass()
Dim score As Integer
Dim attendance As Integer
score = Range("B2").Value
attendance = Range("C2").Value
If score >= 70 And attendance >= 8 Then
MsgBox "合格です!"
Else
MsgBox "不合格です。"
End If
End Sub
📌 点数と出席回数の両方を満たしている場合のみ「合格」判定になります。
OR 条件の実例:どちらかを満たせば実行
Sub WarnIfLate()
Dim lateCount As Integer
Dim absentCount As Integer
lateCount = Range("D2").Value
absentCount = Range("E2").Value
If lateCount > 3 Or absentCount > 1 Then
MsgBox "要注意:遅刻または欠席が多いです"
End If
End Sub
📌 遅刻が多い or 欠席が多い、いずれかを満たしていれば警告を表示します。
括弧 () の使い方と優先順位
VBA では、AND よりも OR の方が優先される ため、条件が混在するときは括弧で明示的に制御 する必要があります。
❌ 誤解を招く例(優先順位に注意)
If A = 1 Or B = 2 And C = 3 Then
これは実際には
→ If A = 1 Or (B = 2 And C = 3) Then
として処理されます。
✅ 正しい括弧の使用
If (A = 1 Or B = 2) And C = 3 Then
📌 条件の組み合わせが複雑になるほど、括弧で意図を明確にすることが重要です。
否定(Not)の使い方
条件を反転したい場合は、Not を使います。
If Not IsNumeric(Range("A1").Value) Then
MsgBox "数値ではありません"
End If
📌 「数値でない場合」など、否定の条件もよく使われます。
条件を変数に分けると読みやすくなる
複雑な条件式は 変数に分けることで読みやすく なります。
Sub EvaluateCondition()
Dim isScoreOk As Boolean
Dim isAttendanceOk As Boolean
isScoreOk = Range("B2").Value >= 70
isAttendanceOk = Range("C2").Value >= 8
If isScoreOk And isAttendanceOk Then
MsgBox "合格!"
Else
MsgBox "不合格。"
End If
End Sub
📌 条件式を見やすくすることで、保守性・デバッグ効率が向上します。
ElseIf を使った複数条件の分岐
複数のパターンを分けて処理するなら、ElseIf を活用するとスマートです。
Sub JudgeGrade()
Dim score As Integer
score = Range("A1").Value
If score >= 90 Then
MsgBox "評価:A"
ElseIf score >= 70 Then
MsgBox "評価:B"
ElseIf score >= 50 Then
MsgBox "評価:C"
Else
MsgBox "評価:D"
End If
End Sub
📌 点数に応じてランクを分ける典型的なパターンです。
よくあるミスと注意点
| ミス例 | 解説 |
|---|---|
If A = B And C | → C は論理値(True/False)と解釈されてしまう |
| 比較が抜けている | If A = B And C = 1 のように、すべての条件に比較演算子が必要! |
| 括弧がない | 条件の意図が伝わらない・誤判定になることがある |
まとめ
| 項目 | 内容 |
|---|---|
| AND | すべての条件が成り立つ場合に処理 |
| OR | いずれか1つでも条件が成り立つ場合に処理 |
| 括弧の使用 | 条件の優先順位を明確にするために必須 |
| 変数に分ける | 複雑な条件式の可読性が上がる |
| ElseIf | 条件を段階的に評価したいときに便利 |