IF文 VBAテクニック集 VBA一覧 文法・構文

【VBA】If文の複数分岐を実現する方法|ネスト地獄を避けて実務で壊れない条件分岐を書く

Excel VBAで処理を書いていると、ほぼ確実に使うのがIf文です。
最初はシンプルな条件分岐でも、実務で使い続けるうちに
「条件が増えてIfが長くなる」「ElseIfが延々と続く」「どこで何を判定しているのか分からない」
といった状態に陥った経験はないでしょうか。

特に厄介なのが、
複数条件・複数パターンをIf文だけで処理しようとした結果、ネストが深くなりすぎるケースです。
動いてはいるものの、

  • 修正が怖い
  • 追加条件を入れられない
  • 自分以外が触れない

という「実務で使い続けられないコード」になりがちです。

この記事では、VBAでIf文の複数分岐を実現するための考え方と実装方法を、
基礎から実務レベルまで段階的に解説します。
「Ifが増えたらどう設計すべきか」「Select Caseとの使い分けはどう考えるのか」まで含めて解説しますので、
条件分岐で悩んでいる方は、ぜひ最後までご覧ください。

✅ VBAでIf文の複数分岐が難しく感じる理由

※ここを飛ばすと、後半の設計話が腑に落ちません。
If文そのものは簡単でも、複数分岐になると一気に難しく感じます。
それは「書き方」の問題ではなく、「考え方」の問題です。
この章では、If文が複雑化しやすい理由を整理します。

VBAでIf文が読みにくくなる主な原因は次の通りです。

  • 条件が増えるたびにElseIfを追加する
  • 条件の意味がコメントなしでは分からない
  • 処理内容と判定条件が混在している
  • 分岐の全体像が見えない

特に「あとから条件が追加される」実務では、
最初から複数分岐を想定していないIf文は、ほぼ確実に破綻します。


✅ If文の基本構文を正しく理解する

※「知っているつもり」になりやすい部分です。
複数分岐を正しく扱うには、基本構文の理解が不可欠です。
曖昧なまま進むと、ネスト地獄に直行します。
まずはIf文の基本形を整理します。

・単純なIf文

If score >= 80 Then
    result = "合格"
End If

解説(実務視点)

  • 条件が1つだけの場合は非常に読みやすい
  • 処理の意図が明確
  • この形を無理に崩さないことが重要

✅ ElseIfを使った複数分岐の基本

※ここがIf文の分岐の出発点です。
ElseIfは便利ですが、使い方を誤ると一気に読みにくくなります。
この章では、ElseIfの正しい使い方を確認します。

If score >= 80 Then
    result = "A"
ElseIf score >= 70 Then
    result = "B"
ElseIf score >= 60 Then
    result = "C"
Else
    result = "D"
End If

解説(実務視点)

  • 上から順に条件を評価する
  • 条件の「順番」が結果に直結する
  • 数値範囲の分岐には非常に向いている

👉
この形は 「大小関係がある条件」 では非常に有効です。


✅ If文をネストすると何が問題なのか

※ここを軽視すると、後で必ず苦労します。
ネストはVBAで最も嫌われる構造の1つです。
この章では、ネストがもたらす問題点を整理します。

If A = 1 Then
    If B = 1 Then
        If C = 1 Then
            result = "OK"
        End If
    End If
End If

解説(実務視点)

  • 条件の全体像が見えない
  • どこでFalseになったか分からない
  • 条件追加が非常に困難

👉
ネストが2段を超えたら設計を疑うのが実務の鉄則です。

参考:【VBA】ネスト(入れ子)を減らす考え方




✅ 複数条件を1つのIfでまとめる方法(And / Or)

※ネスト回避の基本テクニックです。
条件をまとめるだけで、コードは一気に読みやすくなります。
この章では論理演算子の使い方を整理します。

If A = 1 And B = 1 And C = 1 Then
    result = "OK"
End If

解説(実務視点)

  • ネストを減らせる
  • 条件が「同時成立」する場合に有効
  • 条件が増えすぎると逆に読みにくくなる点に注意

✅ Or条件を使った複数分岐の考え方

※Orの乱用は事故の元です。
便利ですが、実務では特に注意が必要です。
この章ではOr条件の正しい使いどころを解説します。

If status = "A" Or status = "B" Then
    result = "対象"
End If

解説(実務視点)


✅ If文の複数分岐を関数に切り出す設計

※実務で最も効果が高い改善策です。
条件分岐を関数化するだけで、If文は劇的に読みやすくなります。

Function GetRank(score As Long) As String

    If score >= 80 Then
        GetRank = "A"
    ElseIf score >= 70 Then
        GetRank = "B"
    ElseIf score >= 60 Then
        GetRank = "C"
    Else
        GetRank = "D"
    End If

End Function

解説(実務視点)

  • 呼び出し側がスッキリする
  • 条件変更の影響範囲を限定できる
  • テストしやすい

✅ Select Caseとの使い分けを理解する

※If文の複数分岐を語る上で避けて通れません。
Ifで無理に書いているケースの多くは、Select Caseの方が適切です。

Select Case status
    Case "A"
        result = "承認"
    Case "B"
        result = "保留"
    Case "C"
        result = "却下"
    Case Else
        result = "不明"
End Select

解説(実務視点)

  • 値の列挙にはSelect Caseが最適
  • 分岐の全体像が一目で分かる
  • 条件追加が安全

👉
値が決まっている分岐はSelect Case
範囲や論理条件はIf
が基本ルールです。

参考:【VBA】Select Case文の使用例と適用パターン|条件分岐を効率化する方法


✅ 条件が増え続ける場合の実務的アプローチ

※ここが実務レベルの分岐設計です。
If文で耐えようとすると、必ず破綻します。

実務では次のような設計を検討します。

  • 条件をテーブル化する
  • 判定ロジックをデータに持たせる
  • VBAは「振り分け役」に徹する

これにより、
コードを修正せずに条件変更が可能になります。


✅ よくあるNGなIf文の書き方

※実務で頻出する失敗例です。

  • 条件の意味がコメントなしでは分からない
  • ネストが深すぎる
  • ElseIfが10個以上並んでいる
  • 条件と処理が混在している

✅ 実務で使えるIf文複数分岐の設計例(完成形)

Select Case True
    Case score >= 80
        result = "A"
    Case score >= 70
        result = "B"
    Case score >= 60
        result = "C"
    Case Else
        result = "D"
End Select

解説(実務視点)

  • 擬似的に範囲分岐を表現
  • ElseIfの長大化を防止
  • 実務で非常に使われるテクニック

✅ RPA・自動化を意識した条件分岐設計

※一段上の実務視点です。
条件分岐が整理されていると、自動化は一気に楽になります。

  • 判定結果を明確に返す
  • 想定外の値をElseで必ず拾う
  • 分岐漏れを防ぐ



✅ まとめ:If文の複数分岐は「書き方」より「設計」

  • ElseIfの多用は危険信号
  • ネストは2段までを目安にする
  • 条件はまとめる・切り出す
  • Select Caseと使い分ける
  • 実務では変更に強い設計を意識する

If文の複数分岐は、
VBAのスキル差が最も出やすいポイントです。

「とりあえず動く」から、
「誰が見ても直せるコード」へ進化させるために、
ぜひ今回の考え方を実務に取り入れてみてください。

参考:【VBA】If ElseIf Elseを使って「何もしない」条件分岐を実装する方法

    -IF文, VBAテクニック集, VBA一覧, 文法・構文