VBAで自動化 VBA一覧 フィルタリング 抽出・検索処理

【VBA】フィルターをかける方法を徹底解説|実務で使える自動化テクニックとトラブル防止策

Excelで大量のデータから必要な情報を絞り込む際に活躍するオートフィルター
日々の業務で「条件で絞り込み→確認→解除→別の条件で再絞り込み」という作業を繰り返している方も多いのではないでしょうか。

このフィルター操作をVBAで自動化できれば、作業効率が飛躍的に向上し、ミスも減らせます。

本記事では「Excel VBAでフィルターをかける」方法を初心者にもわかりやすく、かつ実務ですぐ使える内容で徹底解説します。

✅ 基本構文
✅ 部分一致・数値・日付フィルターのかけ方
✅ 複数条件でのフィルター設定方法
✅ フィルター解除・再設定時の注意点
✅ 実務で役立つ自動化サンプル

まで網羅しますので、Excel業務を自動化し、ルーチン作業から解放されたい方はぜひ最後までお読みください。


✅  VBAでフィルターをかける基本構文

Excel VBAでオートフィルターをかける基本構文は以下の通りです。

Range("A1").AutoFilter Field:=2, Criteria1:="東京"

ポイント解説:

  • Range("A1"):見出しが記載されているセルを指定(見出しの左上セルを指定することが多い)
  • Field:=2:フィルターをかける列番号(A列=1, B列=2,...)
  • Criteria1:="東京":フィルターの条件

この記述だけで、B列に「東京」という条件でフィルターをかけることが可能です。


【VBA】オートフィルターを「設定のみ」行う方法を徹底解説|解除しないで条件だけ変更・適用

✅  部分一致でフィルターをかける方法

前方一致・後方一致・あいまい検索をしたい場合はワイルドカードを使います。

  • * :0文字以上の任意の文字列
  • ? :任意の1文字

✅ 例:B列で「東京」で始まるデータを抽出する場合

Range("A1").AutoFilter Field:=2, Criteria1:="東京*"

✅ 例:B列で「区」で終わるデータを抽出する場合

Range("A1").AutoFilter Field:=2, Criteria1:="*区"

✅ 例:B列で「東」の次に1文字入り、その後に「京」で終わるデータを抽出する場合

Range("A1").AutoFilter Field:=2, Criteria1:="東?京"

 

✅  数値でフィルターをかける方法

数値で条件を指定してフィルターをかける場合も簡単です。

✅ 例:D列で「100以上」のデータを抽出する場合

Range("A1").AutoFilter Field:=4, Criteria1:=">=100"

✅ 例:D列で「100以上かつ200以下」のデータを抽出する場合(範囲指定)

Range("A1").AutoFilter Field:=4, Criteria1:=">=100", Operator:=xlAnd, Criteria2:="<=200"

日付でフィルターをかける方法

日付データの場合は、シリアル値で認識されることに注意が必要です。

✅ 例:C列で「2025/07/01」のデータのみ抽出する場合

Range("A1").AutoFilter Field:=3, Criteria1:=DateSerial(2025, 7, 1)

✅ 例:C列で「2025年7月」のデータを抽出する場合

「2025/07/01 以上」「2025/07/31 以下」の範囲指定を行います。

Range("A1").AutoFilter Field:=3, Criteria1:=">=2025/07/01", Operator:=xlAnd, Criteria2:="<=2025/07/31"

 複数条件でフィルターをかける方法

・OR条件(「東京」または「大阪」)

Range("A1").AutoFilter Field:=2, Criteria1:="東京", Operator:=xlOr, Criteria2:="大阪"

・OR条件(3つ以上の値の場合:配列を使う)

Dim arr As Variant
arr = Array("東京", "大阪", "名古屋")

Range("A1").AutoFilter Field:=2, Criteria1:=arr, Operator:=xlFilterValues

・AND条件(異なる列の条件を組み合わせる)

例えばB列に「東京」、C列に「営業部」のデータだけ抽出したい場合:

With ActiveSheet
    .Range("A1").AutoFilter Field:=2, Criteria1:="東京"
    .Range("A1").AutoFilter Field:=3, Criteria1:="営業部"
End With

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

 フィルター解除と再設定の注意点

フィルター設定後に別のフィルターを設定する場合、不要な条件が残って誤作動する場合があります。

・フィルター解除方法

✅ フィルター解除(フィルターボタンごと消す)

If ActiveSheet.AutoFilterMode Then
    ActiveSheet.AutoFilterMode = False
End If

✅ フィルター解除(絞り込み解除、フィルターボタンは残す)

If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
End If

・フィルターかけ直しの際の安全な流れ

  1. フィルター解除(ShowAllData)
  2. 必要であればAutoFilterMode=Falseで完全解除
  3. 新しい条件でフィルター設定

この流れを徹底することで誤動作やフィルター残りによるトラブルを防げます。


【VBA】オートフィルターを解除する方法を徹底解説|トラブル防止と業務効率化

実務で役立つフィルター自動化サンプル

・ 売上データから「2025年7月」「営業部」「売上100万円以上」の条件で絞り込む例

Sub FilterSalesData()
    Dim ws As Worksheet
    Set ws = Worksheets("売上データ")

    With ws
        ' フィルター解除(絞り込み解除)
        If .FilterMode Then .ShowAllData

        ' フィルター設定
        .Range("A1").AutoFilter Field:=3, Criteria1:="営業部" ' C列:部署
        .Range("A1").AutoFilter Field:=4, Criteria1:=">=1000000" ' D列:売上
        .Range("A1").AutoFilter Field:=2, Criteria1:=">=2025/07/01", Operator:=xlAnd, Criteria2:="<=2025/07/31" ' B列:日付
    End With
End Sub

このコードを使うと複数条件の複雑な抽出作業を一瞬で完了させられます。


■ VBAでフィルターをかけるときの注意ポイント

✅ フィルターをかける前に必ず見出し行の位置を確認
✅ フィルター対象範囲の列番号は正確に指定
✅ ワイルドカードを使うと部分一致可能(*, ?
✅ 配列での複数条件は環境によって動作差が出る場合があるのでテスト必須
✅ フィルター解除と再設定を適切に行うことで誤動作防止


■まとめ:フィルター自動化でExcel業務を効率化しよう

VBAでフィルターをかける方法をマスターすれば、

✅ クリックによる手動作業を排除
✅ 繰り返し作業を即時化
✅ データ抽出漏れ防止
✅ フィルター条件変更の自由度向上

といった業務効率化・ミス削減・時短の三拍子が揃います。


もしあなたが

✅ フィルター作業で毎日時間を取られている
✅ 大量データから必要な情報だけ瞬時に抽出したい
✅ フィルター条件設定ミスを減らしたい

と思っているなら、この記事で紹介した方法を取り入れるだけで業務が劇的に楽になります。

-VBAで自動化, VBA一覧, フィルタリング, 抽出・検索処理