VBAで条件分岐を作成していると、
「andとorをどう組み合わせればいいのか分からない」
「条件が増えたら動かなくなった」
「思った結果と違う判定になる」
といった問題に直面することがあります。
特に実務では、
- 売上が一定以上 かつ 顧客が有効
- 期限が過ぎている または ステータスが未処理
- 在庫が不足 かつ 発注フラグがオン
といったように、
複数の条件を同時に判断する場面が非常に多くあります。
しかし、andとorを感覚で組み合わせてしまうと、
- 条件が正しく評価されない
- バグの原因になる
- 後から読めないコードになる
といった問題が発生します。
この記事では、
IF文のandとorを組み合わせた複数条件の考え方を、実務で使える形で整理しながら、
読みやすく、保守しやすい条件設計の方法を解説します。
単なる書き方ではなく、
「なぜその条件にするのか」
という設計視点まで理解できる内容になっています。
目次
- ✅ VBA IF文でandとorを組み合わせる基本ルールを理解する
- ・andの意味:すべて満たす必要がある条件
- ・orの意味:どちらかを満たせばよい条件
- ・andとorを同時に使う例
- ✅ andとorを同時に使うときに最も多い失敗(優先順位)
- ・優先順位の基本
- ・誤解しやすい例
- ✅ 括弧を使って条件を明確にする方法(実務必須)
- ・基本例(推奨)
- ・なぜこの書き方にしているのか
- ・別の書き方との違い
- ・実務での注意点
- ✅ 実務でよくある複数条件の具体例(売上・ステータス・期限)
- ・例:売上判定と顧客ステータス
- ・例:期限チェック
- ・なぜこの書き方にしているのか
- ・実務での注意点
- ✅ 条件が増えたときに読みやすくする設計(変数化)
- ・推奨設計(変数化)
- ・なぜこの書き方にしているのか
- ・別案との違い
- ・実務での注意点
- ✅ ネストを減らすための考え方(Select Caseとの比較)
- ・ネストが深い例
- ・改善例
- ・なぜこの書き方にしているのか
- ✅ IF文の複数条件を「業務仕様」として整理する方法
- ・仕様の書き方(推奨)
- ・実務での重要ポイント
- ✅ まとめ:IF文のandとorは「仕様」を表現するための道具
✅ VBA IF文でandとorを組み合わせる基本ルールを理解する
andとorを組み合わせること自体は難しくありませんが、条件の意味を正しく理解していないと、意図しない結果になります。特に実務では、条件が増えていくにつれてコードが複雑になります。ここで基本ルールを理解しておかないと、後から修正できないコードになります。また、テストでは動いていても、本番データで誤判定が起きることもあります。まずは、andとorの役割を明確に理解することが重要です。
・andの意味:すべて満たす必要がある条件
If 売上 >= 100000 And 顧客区分 = "有効" Then
これは:
- 売上が100000以上
- 顧客区分が有効
両方満たした場合のみ
処理が実行されます。
・orの意味:どちらかを満たせばよい条件
If ステータス = "未処理" Or 期限 < Date Then
これは:
- 未処理
または - 期限切れ
どちらか
を満たせば処理されます。
・andとorを同時に使う例
If 売上 >= 100000 And (顧客区分 = "有効" Or 顧客区分 = "優良") Then
このように、
条件のまとまり
を作ることが重要です。
✅ andとorを同時に使うときに最も多い失敗(優先順位)
andとorを組み合わせるときに最も多い失敗は、「優先順位」を意識していないことです。VBAには計算と同じように評価順序があります。この順序を理解していないと、見た目は正しくても結果が変わります。特に条件が増えると、この問題が顕在化します。ここを理解しておかないと、原因不明のバグに悩むことになります。
・優先順位の基本
And は Or より先に評価されます
つまり:
If A Or B And C Then
これは:
If A Or (B And C) Then
として評価されます。
・誤解しやすい例
If 売上 >= 100000 Or 顧客区分 = "有効" And 地域 = "東京" Then
意図:
- 売上が高い
または - 有効顧客で東京
実際:
If 売上 >= 100000 Or (顧客区分 = "有効" And 地域 = "東京") Then
ここが重要です。
✅ 括弧を使って条件を明確にする方法(実務必須)
条件が複雑になるほど、括弧は必須になります。括弧は単なる記号ではなく、「仕様」を表現する手段です。特に複数人で開発する場合、括弧がないと意図が伝わりません。また、将来条件を追加するときにも影響します。ここを曖昧にすると、修正コストが増えます。
・基本例(推奨)
If (売上 >= 100000) And _
(顧客区分 = "有効" Or 顧客区分 = "優良") Then
この書き方は:
- 条件のまとまりが明確
- 読みやすい
- 修正しやすい
というメリットがあります。
・なぜこの書き方にしているのか
理由は:
仕様が見えるから
です。
条件は:
- 売上条件
- 顧客条件
という構造になっています。
この構造をそのままコードに反映しています。
・別の書き方との違い
例えば:
If 売上 >= 100000 And 顧客区分 = "有効" Or 顧客区分 = "優良" Then
これは:
- 読みにくい
- 誤解しやすい
- バグを生みやすい
という問題があります。
・実務での注意点
条件は:
文章として読めるか
を基準にします。
✅ 実務でよくある複数条件の具体例(売上・ステータス・期限)
実務では、単純な条件はほとんどありません。多くの場合、複数の要素を組み合わせて判断します。ここでは、現場でよくあるパターンを紹介します。これらはそのまま使える実務例です。
・例:売上判定と顧客ステータス
If (売上金額 >= 100000) And _
(顧客ステータス = "有効" Or 顧客ステータス = "優良") Then
MsgBox "対象顧客です"
End If
・例:期限チェック
If (期限 < Date) Or _
(ステータス = "未処理") Then
MsgBox "対応が必要です"
End If
・なぜこの書き方にしているのか
理由:
条件の意味が一目で分かる
からです。
・実務での注意点
条件は:
業務ルール
です。
コードではなく:
仕様
です。
比較演算子を含めて、より実務的な条件分岐を整理したい場合は、【VBA】比較演算子を用いた複数条件の使用方法|実務で迷わない条件分岐の設計の記事も参考になります。
✅ 条件が増えたときに読みやすくする設計(変数化)
条件が増えてくると、1行が非常に長くなります。こうなると、読みづらく、修正しづらいコードになります。ここで重要になるのが「変数化」です。条件に名前を付けることで、コードの意味が明確になります。
・推奨設計(変数化)
Dim isHighSales As Boolean
Dim isValidCustomer As Boolean
isHighSales = (売上金額 >= 100000)
isValidCustomer = _
(顧客ステータス = "有効" Or _
顧客ステータス = "優良")
If isHighSales And isValidCustomer Then
MsgBox "対象顧客です"
End If
・なぜこの書き方にしているのか
理由:
条件に意味を持たせる
ためです。
・別案との違い
直接書く場合:
If 売上金額 >= 100000 And (顧客ステータス = "有効" Or 顧客ステータス = "優良") Then
これは短いですが:
- 修正しにくい
- 読みにくい
- 再利用しにくい
という問題があります。
・実務での注意点
条件が:
2つ以上
になったら、
変数化を検討
します。
✅ ネストを減らすための考え方(Select Caseとの比較)
条件が増えると、If文が入れ子になります。これをネストと呼びます。ネストが深くなると、可読性が急激に低下します。また、バグの原因にもなります。ここでは、ネストを減らす考え方を紹介します。
・ネストが深い例
If 売上 >= 100000 Then
If 顧客区分 = "有効" Then
If 地域 = "東京" Then
MsgBox "対象"
End If
End If
End If
これは:
読みづらい
です。
・改善例
If (売上 >= 100000) And _
(顧客区分 = "有効") And _
(地域 = "東京") Then
MsgBox "対象"
End If
・なぜこの書き方にしているのか
理由:
条件が横に並ぶ
からです。
これは:
読みやすさ
に直結します。
ネストを減らす具体的な設計手法や、読みやすく保守しやすいコードに改善するための考え方については、【VBA】ネスト(入れ子)を減らす考え方|可読性と保守性を劇的に改善する設計手法の記事で詳しく解説しています。
✅ IF文の複数条件を「業務仕様」として整理する方法
最も重要なのは、条件をコードとしてではなく、業務仕様として整理することです。仕様が曖昧だと、コードも曖昧になります。逆に、仕様が明確であれば、コードは自然に書けます。この考え方を持つことが、長期的な保守性につながります。
・仕様の書き方(推奨)
例:
対象条件:
- 売上が100000以上
- 顧客が有効または優良
- 地域が東京
このように:
文章で書く
ことが重要です。
・実務での重要ポイント
コードを書く前に:
条件を日本語で書く
これが:
最も重要です。
✅ まとめ:IF文のandとorは「仕様」を表現するための道具
- andは「すべて満たす」条件
- orは「どちらか」満たす条件
- 括弧で条件のまとまりを作る
- 条件は変数化すると読みやすくなる
- ネストはできるだけ減らす
- 条件は仕様として整理する
IF文は:
単なる文法ではありません。
業務ルールを表現する手段
です。
この視点を持つことで:
- バグが減る
- 修正が楽になる
- 引き継ぎが容易になる
という大きなメリットがあります。