Excel VBA で AdvancedFilter を用い、複数条件を組み合わせて抽出する方法【完全サンプルコード】

目次

概要

Excel の AdvancedFilter は、列見出しを再利用した「条件範囲(Criteria Range)」を設定することで、AND・OR 条件を柔軟に組み合わせた抽出が可能です。本記事では、VBA から インプレース抽出(表示切替のみ) を実行するサンプルコードを示し、条件範囲の作り方と注意点を丁寧に解説いたします。


前提条件

項目内容
対応 ExcelMicrosoft 365 または 2016 以降
元データワークシート「Data」に名前付き範囲 InvoiceData が設定済み
条件範囲ワークシート「Criteria」の F2:G4 (見出し込み)
マクロ配置標準モジュール

条件範囲(Criteria Range)の構成ルール

セル設定内容
F2・G2元データの列見出しをコピー(例:Region, Amount
F3= "East"
(文字列はダブルクォーテーションで囲む)
G3>10000
F4= "West"
G4>5000
  • 同一行は AND 条件 → F3 と G3 は「Region 列が East かつ Amount 列が 10,000 超」。
  • 行が異なれば OR 条件 → F4・G4 は別行のため、上記 AND 条件と OR で結合。

サンプルコード(VBA)

Sub RunAdvancedFilter()

    Dim srcRange   As Range     ' 抽出対象データ
    Dim critRange  As Range     ' 条件範囲
    
    '--- 範囲オブジェクトの設定 ---
    Set srcRange  = Worksheets("Data").Range("InvoiceData")
    Set critRange = Worksheets("Criteria").Range("F2:G4")
    
    '--- AdvancedFilter をインプレースで実行 ---
    srcRange.AdvancedFilter _
        Action:=xlFilterInPlace, _     ' 表示切替のみ
        CriteriaRange:=critRange
    
    MsgBox "指定条件でデータを抽出しました。", vbInformation

End Sub

コード解説

説明
6InvoiceData は元データ全体(見出し行を含む)に定義した名前付き範囲です。
9CriteriaRange に条件範囲 F2:G4 を指定します。見出しと条件を含めた範囲であることが必須です。
11xlFilterInPlace を指定すると、元データの並びを保持したまま可視行が切り替わります。

応用ポイント

  1. 抽出結果を別シートへ転記 vbaコピーする編集するsrcRange.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=critRange, _ CopyToRange:=Worksheets("Result").Range("A1") xlFilterCopy を使用し、CopyToRange に転記先セルを指定します。
  2. 条件範囲を動的に拡張
    条件が増減する場合は、最終行を変数で取得し critRange を再設定すると柔軟に対応できます。
  3. 抽出解除
    If Worksheets("Data").FilterMode Then Worksheets("Data").ShowAllData でフィルター解除が可能です。

よくある質問

質問回答
条件範囲の見出しが元データと完全一致していないとどうなりますか。一致しない列は無視されます。誤った結果を防ぐため、必ずコピー&ペーストで見出しを作成してください。
数式を条件に使えますか。はい。条件セルに数式を入力すると、結果が TRUE になる行だけが抽出されます。

まとめ

AdvancedFilter を VBA から操作すると、複雑な AND/OR 条件をノーコーディングで組み合わせられます。サンプルコードを実行し、条件範囲に応じてデータが正しく抽出されることをご確認ください。条件行を追加・削除するだけでロジックを変更できるため、定期レポートやデータ分析の効率化に大いに役立ちます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次