Excelのオートフィルターは大量データの中から必要な情報を瞬時に抽出できる便利な機能ですが、複数条件で絞り込みを行いたいときにVBAでどう記述すればよいかわからず悩む方が多いのが現状です。
この記事では「Excel VBAでオートフィルターに複数条件を設定する方法」に特化し、
✅ 基本構文と実務で使える複数条件設定の書き方
✅ 配列を使った複数条件指定の方法
✅ AND条件・OR条件の違いと設定方法
✅ よくあるエラー回避のポイント
✅ 実務活用例(部署別・エリア別の売上抽出など)
まで初心者にもわかるように解説します。
VBAで業務自動化を進めたい方、複雑な条件でのフィルター抽出を日々の作業から解放したい方は、ぜひ最後までお読みください。
目次
✅ VBAでオートフィルターを複数条件設定する基本
通常のVBAによるオートフィルター設定は以下のように記述します。
Range("A1").AutoFilter Field:=2, Criteria1:="東京"
これは「B列(Field:=2)に対して”東京”で絞り込みを行う」というシンプルな単一条件です。
しかし複数条件で絞り込みたい場合には、
- 複数条件(AND条件)
- 複数条件(OR条件)
- 配列を使った複数条件
など状況に応じて記述を変える必要があります。
✅ OR条件で複数条件を設定する方法
「東京 または 大阪」というように**どちらかに一致するデータを抽出したい場合(OR条件)**は以下のように記述します。
Range("A1").AutoFilter Field:=2, Criteria1:="東京", Operator:=xlOr, Criteria2:="大阪"
ポイント:
✅ Criteria1 に1つ目の条件
✅ Operator:=xlOr を指定
✅ Criteria2 に2つ目の条件
を設定することで、OR条件でのフィルター抽出が可能です。
✅ 配列を使った複数条件設定(OR条件:3つ以上)
OR条件で3つ以上の条件で絞り込みたい場合、配列(Array)と xlFilterValues を使用します。
例えば「東京、大阪、名古屋で抽出したい場合」は以下の通りです。
Sub FilterMultipleOr()
Dim arrCriteria As Variant
arrCriteria = Array("東京", "大阪", "名古屋")
If ActiveSheet.AutoFilterMode = False Then
ActiveSheet.Range("A1").AutoFilter
End If
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=arrCriteria, Operator:=xlFilterValues
End Sub
✅ arrCriteria = Array("東京", "大阪", "名古屋") のように配列で条件を設定
✅ Operator:=xlFilterValues を指定
することで3つ以上のOR条件フィルターが可能となります。
✅ AND条件で複数条件を設定する方法
AND条件は異なる列同士に条件を設定することで実現します。
例えば、
- B列に「東京」
- C列に「2025年」
を同時に満たすデータを抽出したい場合は以下の通りです。
With ActiveSheet
If .AutoFilterMode = False Then .Range("A1").AutoFilter
.Range("A1").AutoFilter Field:=2, Criteria1:="東京"
.Range("A1").AutoFilter Field:=3, Criteria1:="2025年"
End With
このように異なる列にそれぞれ条件を設定すればAND条件でのフィルタリングが可能です。
【Excel】IF関数で複数条件を指定する方法とは?AND・OR・IFSまで完全ガイド!
✅ 複雑条件(数値範囲・部分一致・複合条件)
・ 数値範囲のフィルター設定
「100以上 かつ 200以下」のような範囲で抽出したい場合は以下のように記述します。
Range("A1").AutoFilter Field:=4, Criteria1:=">=100", Operator:=xlAnd, Criteria2:="<=200"
✅ Operator:=xlAnd を使うと同一列内で範囲条件を指定可能です。
・ 部分一致(前方一致・後方一致)
オートフィルターで部分一致を行いたい場合はワイルドカードを使います。
*:任意の文字列(0文字以上)?:任意の1文字
例:”東京”で始まる場合
Range("A1").AutoFilter Field:=2, Criteria1:="東京*"
例:”市”で終わる場合
Range("A1").AutoFilter Field:=2, Criteria1:="*市"
・ 部分一致で複数条件(OR)
部分一致の複数条件も配列指定で可能です。
Sub FilterPartialMatchMultiple()
Dim arrCriteria As Variant
arrCriteria = Array("東京*", "*市")
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=arrCriteria, Operator:=xlFilterValues
End Sub
ただし部分一致の配列使用時はバージョンや環境によって挙動が異なる場合があるため検証が必要です。
■ フィルター解除と併用する場合の注意点
フィルター処理を行う前に以下のようにフィルター解除を行うと安定します。
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
解除後に複数条件フィルターを設定する流れにすることで前回の条件が残ることによるトラブルを防げます。
■ 実務活用例:部署別・月別での売上データ抽出
シナリオ:
- B列:部署(営業部、開発部)
- C列:月(2025/07、2025/08)
- D列:売上金額
「営業部または開発部」かつ「2025/07のデータ」を抽出したい場合は以下のように記述します。
Sub FilterDeptAndMonth()
Dim arrDept As Variant
arrDept = Array("営業部", "開発部")
With ActiveSheet
If .AutoFilterMode = False Then .Range("A1").AutoFilter
.Range("A1").AutoFilter Field:=2, Criteria1:=arrDept, Operator:=xlFilterValues
.Range("A1").AutoFilter Field:=3, Criteria1:="2025/07"
End With
End Sub
この方法で複雑な条件の抽出を瞬時に自動化可能になり、毎回手作業でフィルタリングする必要がなくなります。
■ よくあるエラー回避ポイント
✅ 条件指定時のデータ型に注意
- 数値は数値として扱う(例:"100" ではなく 100)
- 日付は表示形式でなく内部シリアル値で扱うと安定する
✅ フィルター範囲の見出し位置を確認
Range("A1") は見出しセルである必要があります。違う場合は正しい見出しセルを指定してください。
✅ オートフィルターの重複設定を防ぐ
.AutoFilterMode でフィルター設定有無を確認し、不要な設定を省略することで処理速度が向上します。
✅ 部分一致の配列条件は環境差を考慮
Excelバージョン・OSによって動作差が出ることがあり、動作テストは必ず行うようにしてください。
■ まとめ:VBAで複数条件フィルターを使いこなすと業務は飛躍的に効率化できる
✅ OR条件:Criteria1, Operator:=xlOr, Criteria2
✅ OR条件(3つ以上):配列と Operator:=xlFilterValues
✅ AND条件:異なる列への複数設定
✅ 数値範囲:Operator:=xlAnd, 上下限条件
✅ 部分一致:ワイルドカード *, ? の活用
これらを使いこなすことで、
✅ 毎回の絞り込み作業を一瞬で完了
✅ 人的ミスを防止
✅ RPAとの組み合わせで完全自動化も可能
となり、Excel業務の負担を大幅に削減できます。
もし「フィルター自動化で社内のルーチン業務を短縮したい」「大量データの条件抽出作業を即時化したい」場合は、本記事で紹介したVBAを活用し、ぜひ業務改善に繋げてください。