Excel VBAで詳細フィルターの条件を使う方法|実例6選
Microsoft Excelでは、大量のデータから特定のデータを取り出したいときにフィルター機能をよく使います。その中でも詳細フィルター(高度なフィルター)は、通常のフィルターよりも柔軟な抽出ができる便利な機能です。実はExcel VBAでもこの詳細フィルターを利用でき、マクロで自動化することも可能です。本記事では、Excel VBAで詳細フィルターの条件を使う方法を、6つの具体例とともに分かりやすく解説します。
Excel VBAで詳細フィルターを使う6つの実例
ここでは、Excel VBAによる詳細フィルターの使い方を6つの例に分けて紹介します。
以下のサンプルデータを使用します。

例1:現在の場所にデータを抽出するVBAマクロ
VBAマクロを使って、条件に合うデータを元の場所にそのまま表示する方法です。

範囲B16:E17に抽出条件を設定します。
ステップ1:
- まず開発タブを開きます。
- リボンのマクロの記録をクリックします。
- 新しいダイアログボックスが表示されるので、マクロ名を入力してOKを押します。

ステップ2:
- リボンのマクロをクリックします。
- 対象のマクロを選択し、ステップインを実行します。

ステップ3:
- 以下のVBAコードをコピーして、コードモジュールに貼り付けます。
Sub Filter_Criteria()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter xlFilterInPlace, criteria
End Sub

ステップ4:
- F5キーを押してコードを実行します。

ここでは「Chicago」店舗の売上だけを表示する条件を設定しました。結果は上の画像の通りです。これは、データと条件が同じシート上にある場合の処理方法です。
関連記事: Excelで詳細フィルターを使って別の場所にコピーする方法
例2:データと条件が別々のシートにある場合の詳細フィルター
次に、抽出条件とデータが別のシートにある場合の対処法を紹介します。

データは「Criteria_Different_Sheet」というシートにあり、条件は「Criteria」シートに入力されています。
ステップ1:
- Alt+F11を押してVBE(コードモジュール)を開きます。
- 以下のコードをモジュールに貼り付けます。
Sub Filter_Criteria_2()
Dim data As Range
Dim criteria As Range
Set data = Sheets("Criteria_Different_Sheet").Range("B4:E14")
Set criteria = Sheets("Criteria").Range("B4:E5")
data.AdvancedFilter xlFilterInPlace, criteria
End Sub

ステップ2:
- F5キーでコードを実行します。

このように、条件が別シートにある場合でも問題なくデータを抽出できます。
関連記事: Excelで1つの列に複数条件を指定した詳細フィルターの適用方法
例3:同じシート内の別の場所に抽出結果を貼り付ける
抽出したデータを別の場所に貼り付けたい場合は、以下の手順に従ってください。
ステップ1:
- Alt+F11を押してコードモジュールを開きます。
- 以下のコードを記述します。
Sub Filter_Criteria_3()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=criteria, CopyToRange:=Range("G4:J14")
End Sub

ステップ2:
- F5キーを押すとコードが実行されます。

抽出されたデータが別の場所に貼り付けられました。CopyToRange引数で貼り付け先の範囲を指定しています。
関連コンテンツ: Excelの詳細フィルターで別シートにデータをコピーする方法
あわせて読みたい:
- Excel VBA:範囲内の複数条件で詳細フィルターを使う(5つの方法)
- Excelの詳細フィルターで空白セルを除外する方法(3つの簡単なテクニック)
- Excelの詳細フィルター徹底解説[複数列・複数条件、数式の使用、ワイルドカード]
例4:Excel VBAでユニークなデータのみを抽出する
詳細フィルターを使えば、重複を除いた一意のデータだけを取得できます。この方法では、データセット内の1回目の出現のみが残り、2回目以降の出現は削除されます。
ステップ1:
- Alt+F11を押してコードモジュールを開きます。
- 以下のコードを貼り付けます。
Sub Filter_Criteria_4()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter xlFilterInPlace, criteria, , True
End Sub

ステップ2:
- F5キーでコードを実行します。

ここでは、1回目の出現を緑色、2回目の出現を黄色でマークしています。コードを実行すると、黄色のセル(重複データ)が削除されました。
関連記事: Excelで詳細フィルターを使ってユニークなレコードのみを抽出する方法
例5:条件を設定せずに重複データを削除する
条件を設定しなくても、重複データを削除することができます。手順は以下の通りです。
ステップ1:
- Alt+F11を押してVBAのコードモジュールを開きます。
- 以下のコードをコピーして貼り付けます。
Sub Filter_Criteria_5()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
data.AdvancedFilter xlFilterInPlace, , , True
End Sub

ステップ2:
- F5キーを押すとコードが実行されます。

データセットを見てください。重複している部分にマークを付けています。コード適用後は、1回目の出現だけが残り、それ以外は削除されます。
関連記事: Excelの詳細フィルターが動作しないときの原因と対策(2つの理由と解決策)
例6:条件に演算子を使ってデータを抽出する
条件に比較演算子を使えば、数値の大小などでデータを柔軟に絞り込めます。以下の手順をご覧ください。
ステップ1:
- Alt+F11を押してコードモジュールを開きます。
- 以下のコードをモジュールに貼り付けます。
Sub Filter_Criteria_7()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter xlFilterCopy, criteria, Range("G4:J14")
End Sub

ステップ2:
- F5キーでコードを実行します。

結果として、「$1.00より大きい」値だけが抽出されました。
関連記事: VBAで詳細フィルターを使う方法(ステップバイステップガイド)
注意点
- データの各列には、必ず一意の見出し(重複しない列名)を付けてください。
- データセット内に空白行を入れてはいけません。
まとめ
本記事では、Excel VBAで詳細フィルターの条件を使う6つの実例を紹介しました。同一シートでの抽出から、別シートの条件指定、重複データの削除、演算子を使った絞り込みまで、さまざまな場面に応用できます。日々の業務の自動化にお役立てください。当サイトExceldemy.comもぜひご覧いただき、コメント欄でご意見をお聞かせください。
関連記事
- Excelで複数条件を使った詳細フィルター(15の実例)
- 動的な詳細フィルター(VBA・マクロ)
- Excelの詳細フィルターで条件範囲を指定する方法(18の活用例)
- 条件範囲に文字列が含まれる場合の詳細フィルターの使い方
- Excelの詳細フィルターで「含まない」を指定する2つの方法
-
Excel VBAでデータ入力フォームを作成する方法【初心者向け3ステップ完全ガイド】
ExcelでVBAを活用していると、多くの方がデータ入力フォームの作成でつまずく経験をします。本記事では、VBAを使ってExcelに見栄えが良く使いやすいデータ入力フォームを作成する方法を、わかりやすく解説します。 Excel VBAでデータ入力フォームを作る3つの簡単ステップ ここでは、Washington(ワシントン)・New York(ニューヨーク)・California(カリフォルニア)という3つのワークシートを用意しました。これらには、銀行の3つの支店の顧客の氏名・連絡先・年齢・性別のデータが登録されています。 今回の目標は、VBAを使用してこのデータベースに新しいデータを入力できる
-
ExcelでネストされたANOVA(入れ子分散分析)を実行する方法|具体例付きの詳細解説
分散分析(Analysis of Variance、略してANOVA)は非常に有用な統計分析手法です。1918年にその手法が開発されて以来、幅広い分野で活用されてきました。ANOVAは平均値と各グループ間の統計的な差異を示し、それぞれの値がどの程度関連しているかを判定します。ネストされたANOVA(入れ子分散分析)とは、これらのグループがさらに複数のサブグループに細分化され、個々のサブグループとの相関関係が必ずしも明確ではない場合の分析を指します。本記事では、ネストされたANOVAの概要と、Excelでこの分析を行う方法について詳しく解説します。 デモンストレーションに使用したワークブックは、