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段を超えたら設計を疑うのが実務の鉄則です。
✅ 複数条件を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
解説(実務視点)
- 列挙型の条件では可読性が落ちやすい
- 条件が増えたらSelect Caseを検討する
参考:【VBA】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のスキル差が最も出やすいポイントです。
「とりあえず動く」から、
「誰が見ても直せるコード」へ進化させるために、
ぜひ今回の考え方を実務に取り入れてみてください。