Excel VBAでデータ処理を自動化していると、
「条件に合うデータだけを抽出したい」
という場面は必ず出てきます。
特に実務では、
- 複数の列に条件を指定したい
- AND条件・OR条件を組み合わせたい
- フィルター結果だけを処理したい
- 手動フィルターと同じ動きをVBAで再現したい
といった要求が頻繁に発生します。
しかし、VBAのAutoFilterは、
- 引数が多くて分かりにくい
- 記録マクロのコードが読めない
- 条件を追加すると動かなくなる
など、初心者〜中級者がつまずきやすいポイントの塊でもあります。
この記事では、Excel VBA初心者〜中級者の方を対象に、
AutoFilterを使った複数条件・複数列フィルターの操作設定を、基礎から実務レベルまで徹底的に解説します。
最後まで読むことで、
- AutoFilterの仕組みが理解できる
- 複数条件フィルターを自分で組める
- フィルター結果を安全に扱える
ようになり、
「なんとなく動くVBA」から「設計できるVBA」へ確実にステップアップできます。
目次
- ✅ VBAにおけるフィルター処理の全体像を理解する
- ・VBAで使うフィルターはAutoFilter
- ・VBAフィルター処理の流れ
- ✅ AutoFilterの基本構文を正しく理解する
- ・AutoFilterの基本形
- ・主要引数の意味
- ・Fieldは列番号で指定する点に注意
- ✅ 単一列・単一条件のフィルター設定
- ・1列に1条件を指定する例
- ・コード解説
- ✅ 複数条件(AND条件)を指定する方法
- ・AND条件の基本例
- ・コード解説(重要)
- ・よくある失敗例
- ✅ OR条件を使った複数条件フィルター
- ・OR条件の基本例
- ・コード解説
- ✅ 複数列に条件を指定するフィルター設定
- ・複数列フィルターの考え方
- ・複数列フィルターの例
- ・重要なポイント
- ✅ 日付を条件にした複数条件フィルター
- ・日付条件の例
- ・注意点
- ✅ フィルター結果(可視セル)だけを処理する
- ・可視セルの取得方法
- ・コピーする例
- ・注意点
- ✅ フィルター解除の正しい方法
- ・フィルター解除コード
- ・なぜ必要か
- ✅ 実務でよくある失敗と対策
- ・列番号を間違える
- ・条件を数値で指定してしまう
- ・フィルター解除を忘れる
- ✅ まとめ:複数条件・複数列フィルターは設計がすべて
✅ VBAにおけるフィルター処理の全体像を理解する
フィルター処理は「条件指定」だけの話ではありません。
仕組みを理解せずにコードを書くと、
条件追加や仕様変更のたびに修正が必要になります。
ここで全体像を押さえておくことが、後半の理解を大きく助けます。
この章を飛ばすと、複数条件フィルターは必ず混乱します。
・VBAで使うフィルターはAutoFilter
Excel VBAで扱うフィルター処理は、
基本的に AutoFilterメソッド を使用します。
Range("A1").AutoFilter
これは、手動操作の
「データ → フィルター」
と同じ仕組みです。
・VBAフィルター処理の流れ
VBAでのフィルター処理は、次の流れで考えます。
- フィルター対象範囲を決める
- フィルターを設定する
- 条件を指定する
- 結果を処理する
- フィルターを解除する
👉 この5ステップ構造を意識することが重要です。
✅ AutoFilterの基本構文を正しく理解する
いきなり複数条件に進む前に、
AutoFilterの基本構文を正しく理解しておく必要があります。
ここを曖昧にしたまま進むと、
引数の意味が分からず必ず詰まります。
基本を押さえることで、応用が一気に楽になります。
・AutoFilterの基本形
Range("A1:D100").AutoFilter Field:=1, Criteria1:="A"
・主要引数の意味
- Field
→ 何列目でフィルターするか(左からの列番号) - Criteria1
→ フィルター条件 - Operator
→ 条件の組み合わせ方法(AND / OR) - Criteria2
→ 2つ目の条件
・Fieldは列番号で指定する点に注意
Field:=1 ' 範囲の1列目
👉 シート上の列番号ではなく、指定範囲内での位置です。
✅ 単一列・単一条件のフィルター設定
まずは最も基本的な形です。
ここを確実に理解しておくことで、
複数条件・複数列が自然に理解できるようになります。
基本を飛ばすと、後半が難しくなります。
・1列に1条件を指定する例
Range("A1:D100").AutoFilter Field:=2, Criteria1:=">=100"
・コード解説
Field:=2
→ 2列目を対象Criteria1:=">=100"
→ 100以上のデータを抽出
👉 数値条件は文字列として指定する点が重要です。
✅ 複数条件(AND条件)を指定する方法
ここからが本題です。
実務では「○○以上かつ△△以下」といった
AND条件 が非常によく使われます。
ここを正しく書けるかどうかが、
AutoFilter理解の分かれ道になります。
・AND条件の基本例
Range("A1:D100").AutoFilter _
Field:=3, _
Criteria1:=">=50", _
Operator:=xlAnd, _
Criteria2:="<=100"
・コード解説(重要)
Operator:=xlAnd
→ 両方の条件を満たすデータのみ表示- Criteria1 / Criteria2
→ 同じ列に対する条件
👉 同一列で複数条件を指定する場合はOperatorが必須です。
・よくある失敗例
Criteria1:=50
👉 これは 誤り
必ず ">=50" のように文字列で指定します。
✅ OR条件を使った複数条件フィルター
次に OR条件 です。
「AまたはB」といった条件は、
実務で非常に頻繁に登場します。
ここを理解していないと、
If文で無理やり対応しがちになります。
・OR条件の基本例
Range("A1:D100").AutoFilter _
Field:=1, _
Criteria1:="A", _
Operator:=xlOr, _
Criteria2:="B"
・コード解説
Operator:=xlOr
→ どちらか一方を満たせばOK
👉 手動フィルターの
「複数選択」と同じ動きです。
✅ 複数列に条件を指定するフィルター設定
実務で最もよく使われるのが、
複数列に対して条件を指定するケースです。
ここが理解できると、
データ抽出の幅が一気に広がります。
・複数列フィルターの考え方
AutoFilterは、
列ごとに独立して条件を設定します。
・複数列フィルターの例
With Range("A1:D100")
.AutoFilter Field:=1, Criteria1:="A"
.AutoFilter Field:=3, Criteria1:=">=50"
End With
・重要なポイント
- AutoFilterは上書きではなく「追加」される
- 列ごとの条件は自動的にAND条件になる
👉 複数列=AND条件と覚えておくと分かりやすいです。
参考:【VBA】抽出したデータを別ブックにコピーする実務完全ガイド
✅ 日付を条件にした複数条件フィルター
日付条件は、
AutoFilterで最もトラブルが多いポイントです。
ここを曖昧にすると、
意図しない抽出結果になります。
・日付条件の例
Range("A1:D100").AutoFilter _
Field:=4, _
Criteria1:=">=2024/01/01", _
Operator:=xlAnd, _
Criteria2:="<=2024/12/31"
・注意点
- 日付も文字列で指定
- 表示形式ではなく「内部値」で判定
👉 日付の扱いは テスト必須 です。
✅ フィルター結果(可視セル)だけを処理する
フィルターをかけた後、
表示されている行だけを処理したい
というケースが非常に多くあります。
・可視セルの取得方法
Range("A2:D100").SpecialCells(xlCellTypeVisible)
・コピーする例
Range("A2:D100").SpecialCells(xlCellTypeVisible).Copy
・注意点
- データが0件の場合はエラーになる
- On Error対策が必須
✅ フィルター解除の正しい方法
処理後にフィルターを解除しないと、
次の処理で事故が起こります。
ここは実務では非常に重要です。
・フィルター解除コード
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
・なぜ必要か
- フィルター状態が残る
- データ件数がズレる
- ユーザーが混乱する
👉 解除まで含めてフィルター処理です。
参考:【VBA】フィルター結果を新しいブックに保存する方法|抽出データを自動で別ファイル化する実務テクニック
✅ 実務でよくある失敗と対策
・列番号を間違える
→ 範囲基準で考える
・条件を数値で指定してしまう
→ 文字列で指定する
・フィルター解除を忘れる
→ 必ず最後に解除処理を書く
✅ まとめ:複数条件・複数列フィルターは設計がすべて
- AutoFilterは列ごとに条件指定
- 同一列の複数条件はOperator必須
- 複数列は自動的にAND条件
- 可視セル処理はエラー対策必須
- フィルター解除までが1セット
VBAのフィルター処理は、
単なる操作自動化ではなく、データ抽出ロジックそのものです。
ここを正しく理解すれば、
- 集計
- 帳票作成
- 別ファイル出力
など、あらゆる実務VBAに応用できます。