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
小規模な判定ならこれで十分ですが、条件が増えるとコードが長くなり可読性が下がります。
・Select Caseを使う
数値や文字列がリスト化される場合は Select Case
の方が見やすくなります。
Select Case code
Case "A1", "B2", "C3"
MsgBox "リストに一致"
Case Else
MsgBox "対象外"
End Select
この書き方なら条件が増えてもスッキリ整理できます。
✅ 配列を使って複数条件をまとめる
・配列でリスト化する
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
リストを配列にまとめることで、条件の追加・削除が容易になります。
・関数化して使いやすくする
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を使うメリット
- 大量のデータでも高速に検索可能
- キーの存在チェックが容易
参考:【VBA】変数一覧と確認方法まとめ|型・宣言・一覧出力まで徹底解説
・サンプルコード
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
✅ 複数条件リスト判定の注意点
- 条件が多いときは配列やDictionaryを使う
Orの羅列は保守性が低下。 - Select Caseは可読性を重視するときに有効
小~中規模の条件で見やすく整理。 - 大規模リストはDictionaryで高速化
100件以上の条件がある場合は特に有効。 - 関数化で再利用性を高める
「InList」関数を作れば複数のマクロで活用可能。
✅ 実務での効果とメリット
- コードが短く整理され、可読性が高まる
- 条件追加・削除が容易になり保守性が向上
- リスト管理により業務要件変更に対応しやすい
- 大量データでもDictionaryで処理が高速化
■ まとめ:If文で複数条件をリスト化して効率的に判定しよう
- 小規模な条件分岐 → Or演算子やSelect Caseで対応
- 条件リストが増える場合 → 配列や関数化で管理
- 大規模な条件判定 → Dictionaryで高速チェック
- 実務では「商品コードの一致」「重要ワードの抽出」「複数条件の組み合わせ抽出」などに応用可能
ExcelVBAでIf文を効率的に書けるようになると、条件判定処理の保守性や処理速度が格段に向上します。リスト化を活用して、業務に柔軟に対応できるコードを書いていきましょう。