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

【VBA】If文の複数条件をリストで判定する方法|効率的な条件分岐の書き方と応用

ExcelVBAを使って条件分岐を記述する際、最も多用されるのがIf ~ ElseIf ~ Else構文です。しかし、実務では「複数の候補リストに含まれるかどうか」で処理を分けたい場面が多くあります。

例えば、商品コードが「A1」「B2」「C3」のいずれかなら処理を行う、部署名が特定のリストに含まれていれば抽出する、などです。このようなケースで1つずつ If x = "A1" Or x = "B2" Or x = "C3" と書くのは煩雑で、保守性も低くなります。

この記事では「vba if 複数条件 リスト」をテーマに、If文で複数条件を効率的に判定する方法を解説します。基本的なOrの使い方から、配列・コレクション・Dictionaryを利用したリスト判定まで、実務で役立つテクニックを徹底的に紹介します。

✅ If文で複数条件を記述する基本

・Or演算子を使う

複数条件をシンプルに書くには Or を使います。

Dim code As String
code = Range("A1").Value

If code = "A1" Or code = "B2" Or code = "C3" Then
    MsgBox "リストに一致"
Else
    MsgBox "対象外"
End If

小規模な判定ならこれで十分ですが、条件が増えるとコードが長くなり可読性が下がります。

参考:【VBA】IF文のorを3つ以上組み合わせた複数条件


・Select Caseを使う

数値や文字列がリスト化される場合は Select Case の方が見やすくなります。

Select Case code
    Case "A1", "B2", "C3"
        MsgBox "リストに一致"
    Case Else
        MsgBox "対象外"
End Select

この書き方なら条件が増えてもスッキリ整理できます。

参考:【VBA】Select Case文での複数処理の方法


✅ 配列を使って複数条件をまとめる

・配列でリスト化する

Dim arr, i As Long, flg As Boolean
arr = Array("A1", "B2", "C3")

flg = False
For i = LBound(arr) To UBound(arr)
    If code = arr(i) Then
        flg = True
        Exit For
    End If
Next i

If flg Then
    MsgBox "リストに一致"
Else
    MsgBox "対象外"
End If

リストを配列にまとめることで、条件の追加・削除が容易になります。

参考:【VBA】範囲指定のセルの値:配列を変数に格納


・関数化して使いやすくする

Function InList(val As String, arr As Variant) As Boolean
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        If val = arr(i) Then
            InList = True
            Exit Function
        End If
    Next i
End Function

呼び出し側:

If InList(code, Array("A1", "B2", "C3")) Then
    MsgBox "一致"
End If
 参考:【VBA】Function で複数の戻り値を返す方法と活用例

✅ Dictionaryを使った高速判定

・Dictionaryを使うメリット

・サンプルコード

Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")

dic.Add "A1", True
dic.Add "B2", True
dic.Add "C3", True

If dic.Exists(code) Then
    MsgBox "リストに一致"
Else
    MsgBox "対象外"
End If

リストが大きい場合や検索処理を何度も行う場合に効果的です。


✅ 実務で使える応用例

・商品コードのリストチェック

Sub CheckProductCode()
    Dim code As String
    code = Range("A1").Value
    
    If InList(code, Array("P01", "P02", "P03")) Then
        Range("B1").Value = "対象商品"
    Else
        Range("B1").Value = "対象外"
    End If
End Sub

・複数条件で色分け

Sub HighlightByList()
    Dim arr, c As Range
    arr = Array("重要", "要確認", "至急")
    
    For Each c In Range("A1:A20")
        If InList(c.Value, arr) Then
            c.Interior.Color = vbYellow
        End If
    Next c
End Sub
 参考:【VBA】2次元配列を使用して一括で格納・格納データをループで処理する方法

・複数条件を組み合わせた抽出

Sub ExtractRows()
    Dim wsOut As Worksheet, r As Long, c As Range
    Dim arr
    arr = Array("東京", "大阪", "名古屋")
    
    Set wsOut = Sheets("抽出結果")
    r = 1
    
    For Each c In Range("A2:A100")
        If InList(c.Value, arr) And c.Offset(0, 1).Value = "完了" Then
            wsOut.Rows(r).Value = c.EntireRow.Value
            r = r + 1
        End If
    Next c
End Sub



✅ 複数条件リスト判定の注意点

  1. 条件が多いときは配列やDictionaryを使う
    Orの羅列は保守性が低下。
  2. Select Caseは可読性を重視するときに有効
    小~中規模の条件で見やすく整理。
  3. 大規模リストはDictionaryで高速化
    100件以上の条件がある場合は特に有効。
  4. 関数化で再利用性を高める
    「InList」関数を作れば複数のマクロで活用可能。

✅ 実務での効果とメリット

  • コードが短く整理され、可読性が高まる
  • 条件追加・削除が容易になり保守性が向上
  • リスト管理により業務要件変更に対応しやすい
  • 大量データでもDictionaryで処理が高速化

■ まとめ:If文で複数条件をリスト化して効率的に判定しよう

  • 小規模な条件分岐 → Or演算子やSelect Caseで対応
  • 条件リストが増える場合 → 配列や関数化で管理
  • 大規模な条件判定 → Dictionaryで高速チェック
  • 実務では「商品コードの一致」「重要ワードの抽出」「複数条件の組み合わせ抽出」などに応用可能

ExcelVBAでIf文を効率的に書けるようになると、条件判定処理の保守性や処理速度が格段に向上します。リスト化を活用して、業務に柔軟に対応できるコードを書いていきましょう。

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