VBAのIf文は、単純な条件分岐だけでなく、「ネスト(入れ子)」することで、より細かい条件分岐を実現できます。
ただし、ネストを多用するとコードが読みにくくなるため、適切に使うことが重要です。
この記事では、If文のネストの基本的な使い方と、実際の例を交えて注意点を解説します。
目次
1. If文をネストするとは?
ネストとは、If文の内部に別のIf文を記述することを指します。
これにより、「ある条件が満たされた場合に、さらに別の条件をチェックする」といった処理が可能になります。
基本構文
If 条件1 Then
If 条件2 Then
'条件1と条件2の両方がTrueのとき実行
Else
'条件1はTrueだが、条件2がFalseのとき実行
End If
Else
'条件1がFalseのとき実行
End If
2. Ifのネストの実用例
(1) 2段階の条件判定
「最初の条件がTrueなら、次の条件を判定する」というシンプルな分岐です。
例:A1の値が50以上なら、さらにB1の値を確認してメッセージを表示
Sub NestedIfExample1()
If Range("A1").Value >= 50 Then
If Range("B1").Value >= 100 Then
MsgBox "A1は50以上、かつB1は100以上です"
Else
MsgBox "A1は50以上ですが、B1は100未満です"
End If
Else
MsgBox "A1は50未満です"
End If
End Sub
ポイント
- A1が50以上の場合にのみ、B1の値をチェックする。
- 条件が段階的に評価されるため、無駄な判定を減らせる。
(2) 3段階の条件判定
「2つの条件の組み合わせに加えて、さらにもう1つの条件を判定する」分岐です。
例:年齢と点数を基に合格・不合格を判定
Sub NestedIfExample2()
Dim age As Integer, score As Integer
age = Range("A1").Value
score = Range("B1").Value
If age >= 18 Then
If score >= 80 Then
MsgBox "合格です!"
Else
MsgBox "年齢はOKですが、点数が足りません"
End If
Else
If score >= 90 Then
MsgBox "未成年ですが、特別に合格です"
Else
MsgBox "年齢も点数も条件を満たしていません"
End If
End If
End Sub
ポイント
- ネストを活用して、細かい条件分岐を実装
- 未成年でも特別合格のルールを追加
- 条件が増えるほど、可読性が低下する点に注意。
3. Ifのネストを使う際の注意点
(1) ネストが深くなりすぎると可読性が悪化
深くネストしすぎると、コードが読みにくくなります。
If A Then
If B Then
If C Then
If D Then
'かなり深いネスト(読みにくい)
End If
End If
End If
End If
対策
- ElseIfを使ってネストを減らす
- 早期リターン(Exit Sub)を使う
(2) ElseIfを活用してシンプルに
ネストを減らすには、ElseIf を活用すると良い。
Sub UseElseIf()
Dim score As Integer
score = Range("A1").Value
If score >= 90 Then
MsgBox "優秀"
ElseIf score >= 80 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
End Sub
メリット
- ネストを減らしてコードがシンプルに
- 条件分岐が一目で分かる
(3) 早期リターン(Exit Sub)を活用
条件が満たされない場合、早めに処理を終了することで、ネストを減らす。
Sub UseEarlyExit()
Dim age As Integer
age = Range("A1").Value
If age < 18 Then
MsgBox "未成年のため対象外"
Exit Sub 'ここで処理を終了
End If
'ここまで到達するのは、age >= 18 の場合のみ
MsgBox "対象者です"
End Sub
メリット
- 不要なネストを削減
- 処理の流れを簡潔に
4. まとめ
- If文をネストすることで、複雑な条件分岐を実現可能
- ネストが深くなりすぎると可読性が悪化するため、ElseIfや早期リターンを活用
- 適切な書き方を意識すると、読みやすくメンテナンスしやすいコードになる
VBAのIf文を適切に使いこなして、より分かりやすく効率的なプログラムを書いてみてください!
コメント