VBAで自動化 VBA一覧 フィルター操作 抽出・検索処理

【VBA】フィルター機能【複数条件・複数列フィルター】の操作設定|AutoFilterを実務で

Excel VBAでデータ処理を自動化していると、
「条件に合うデータだけを抽出したい」
という場面は必ず出てきます。

特に実務では、

  • 複数の列に条件を指定したい
  • AND条件・OR条件を組み合わせたい
  • フィルター結果だけを処理したい
  • 手動フィルターと同じ動きをVBAで再現したい

といった要求が頻繁に発生します。

しかし、VBAのAutoFilterは、

  • 引数が多くて分かりにくい
  • 記録マクロのコードが読めない
  • 条件を追加すると動かなくなる

など、初心者〜中級者がつまずきやすいポイントの塊でもあります。

この記事では、Excel VBA初心者〜中級者の方を対象に、
AutoFilterを使った複数条件・複数列フィルターの操作設定を、基礎から実務レベルまで徹底的に解説します。

最後まで読むことで、

  • AutoFilterの仕組みが理解できる
  • 複数条件フィルターを自分で組める
  • フィルター結果を安全に扱える

ようになり、
「なんとなく動くVBA」から「設計できるVBA」へ確実にステップアップできます。

✅ VBAにおけるフィルター処理の全体像を理解する

フィルター処理は「条件指定」だけの話ではありません。
仕組みを理解せずにコードを書くと、
条件追加や仕様変更のたびに修正が必要になります。
ここで全体像を押さえておくことが、後半の理解を大きく助けます。
この章を飛ばすと、複数条件フィルターは必ず混乱します。

・VBAで使うフィルターはAutoFilter

Excel VBAで扱うフィルター処理は、
基本的に AutoFilterメソッド を使用します。

Range("A1").AutoFilter

これは、手動操作の
「データ → フィルター」
と同じ仕組みです。


・VBAフィルター処理の流れ

VBAでのフィルター処理は、次の流れで考えます。

  1. フィルター対象範囲を決める
  2. フィルターを設定する
  3. 条件を指定する
  4. 結果を処理する
  5. フィルターを解除する

👉 この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に応用できます。

参考:【Excel】IF関数で複数条件を指定する方法とは?AND・OR・IFSまで完全ガイド!

    -VBAで自動化, VBA一覧, フィルター操作, 抽出・検索処理