目次
概要
Excel の AdvancedFilter は、列見出しを再利用した「条件範囲(Criteria Range)」を設定することで、AND・OR 条件を柔軟に組み合わせた抽出が可能です。本記事では、VBA から インプレース抽出(表示切替のみ) を実行するサンプルコードを示し、条件範囲の作り方と注意点を丁寧に解説いたします。
前提条件
項目 | 内容 |
---|---|
対応 Excel | Microsoft 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
コード解説
行 | 説明 |
---|---|
6 | InvoiceData は元データ全体(見出し行を含む)に定義した名前付き範囲です。 |
9 | CriteriaRange に条件範囲 F2:G4 を指定します。見出しと条件を含めた範囲であることが必須です。 |
11 | xlFilterInPlace を指定すると、元データの並びを保持したまま可視行が切り替わります。 |
応用ポイント
- 抽出結果を別シートへ転記 vbaコピーする編集する
srcRange.AdvancedFilter _ Action:=xlFilterCopy, _ CriteriaRange:=critRange, _ CopyToRange:=Worksheets("Result").Range("A1")
xlFilterCopy
を使用し、CopyToRange
に転記先セルを指定します。 - 条件範囲を動的に拡張
条件が増減する場合は、最終行を変数で取得しcritRange
を再設定すると柔軟に対応できます。 - 抽出解除
If Worksheets("Data").FilterMode Then Worksheets("Data").ShowAllData
でフィルター解除が可能です。
よくある質問
質問 | 回答 |
---|---|
条件範囲の見出しが元データと完全一致していないとどうなりますか。 | 一致しない列は無視されます。誤った結果を防ぐため、必ずコピー&ペーストで見出しを作成してください。 |
数式を条件に使えますか。 | はい。条件セルに数式を入力すると、結果が TRUE になる行だけが抽出されます。 |
まとめ
AdvancedFilter を VBA から操作すると、複雑な AND/OR 条件をノーコーディングで組み合わせられます。サンプルコードを実行し、条件範囲に応じてデータが正しく抽出されることをご確認ください。条件行を追加・削除するだけでロジックを変更できるため、定期レポートやデータ分析の効率化に大いに役立ちます。