Excel VBAで範囲内の複数の条件による詳細フィルターを適用する5つの方法
大量のデータを扱う際に、複数のフィルター条件を一度に設定したい場合、Excelの詳細フィルター(Advanced Filter)が非常に便利です。重複データを削除してデータを整理する用途にも活用できます。さらに、VBAコードを使えば詳細フィルターの実行が格段に簡単になります。このチュートリアルでは、VBA Advanced Filterを使って、Excelで複数の条件範囲に対してフィルターを適用する方法をご紹介します。
Excel VBAで範囲内の複数条件による詳細フィルターを適用する5つの効果的な方法
以下では、複数の条件に対してVBA Advanced Filterを使用する5つの方法について順番に解説します。まずは、VBA Advanced Filterの構文を確認しておきましょう。
VBA Advanced Filterの構文:
- AdvancedFilter: 範囲オブジェクトを参照します。フィルターを適用したい範囲をここで指定します。
- Action: 必須引数で、「xlFilterInPlace」または「xlFilterCopy」の2つのオプションがあります。「xlFilterInPlace」はデータセットがある場所でそのままフィルターを実行し、「xlFilterCopy」は別の指定した場所へフィルター結果を出力します。
- CriteriaRange: 値を抽出するための検索条件(基準)を表します。
- CopyToRange: フィルター結果を保存する出力先の場所です。
- Unique: 任意の引数です。「True」を指定すると一意の値のみを抽出します。省略した場合は既定で「False」として扱われます。
下図のサンプルデータセットを使用して、これから紹介するすべてのフィルター操作を行います。
1. OR条件(いずれかに該当)でVBA詳細フィルターを適用する
最初の方法では、VBA Advanced Filterを使用してOR条件を適用します。例として、商品名が「Cookies(クッキー)」と「Chocolate(チョコレート)」のどちらかに該当するデータを抽出してみましょう。OR条件を適用するには、条件値を異なる行に入力します。以下の手順に従って作業を進めてください。
ステップ1:
- Alt + F11 を押してVBAエディタ(VBA Macro)を開きます。
- 「挿入(Insert)」をクリックします。
- 「標準モジュール(Module)」を選択します。
ステップ2:
- 次のVBAコードを貼り付けて、OR条件を適用します。
Sub Apply_VBA_Advanced_Filter_for_OR_Criteria()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of datase range and criteria range
Set Dataset_Rng = Sheets("Sheet1").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet1").Range("B14:E16")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub
ステップ3:
- プログラムを保存し、F5キーを押して実行します。
- すると、下図のようにフィルター結果が表示されます。
ポイント: フィルターを解除して元のデータセットに戻したい場合は、以下のVBAプログラムを貼り付けて実行してください。
Sub Remove_All_Filter()
On Error Resume Next
'command to remove all the filter to show the previous dataset
ActiveSheet.ShowAllData
End Sub
- 実行すると、元のデータセットの状態に戻ります。
2. AND条件(すべてに該当)でVBA詳細フィルターを適用する
前の方法と同様に、今度はAND条件に対してVBA詳細フィルターを実行します。例として、価格が$0.65であるクッキーのデータを抽出します。AND条件を適用する場合は、条件値を同じ行の異なる列に入力します。以下の手順に従ってください。
ステップ1:
- Alt + F11 を押してVBAエディタ(VBA Macro)を開きます。
- 開いたら、新しいモジュールに次のVBAコードを貼り付けます。
Sub Apply_VBA_Advanced_Filter_for_AND_Criteria()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet2").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet2").Range("B14:E15")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub
ステップ2:
- 保存後、F5キーを押してプログラムを実行します。
- 最後に、フィルター結果を確認します。
3. OR条件とAND条件を組み合わせてVBA詳細フィルターを適用する
OR条件とAND条件は、組み合わせて使うこともできます。たとえば、「Cookies(クッキー)」または「Chocolates(チョコレート)」のデータを取得したいが、Cookiesについては追加条件として価格$0.65を適用したい、といったケースです。以下の手順で実現できます。
ステップ1:
- VBAエディタ(VBA Macro)を開き、次のVBAコードを貼り付けます。
Sub Apply_VBA_Advanced_Filter_for_OR_with_AND_Criteria()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet3").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet3").Range("B14:E16")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub
ステップ2:
- まずプログラムを保存し、その後F5キーを押して実行します。
- 結果として、指定したAND条件とOR条件を満たす値だけが表示されます。
4. 複数条件で一意の値のみを抽出するVBA詳細フィルターを使用する
また、データセットに重複が含まれている場合、フィルターと同時に重複を削除することもできます。Unique引数にTrueを指定することで、一意の値のみを抽出し、重複を除外できます。以下の手順に従ってください。
ステップ1:
- まず、Alt + F11を押してVBAエディタ(VBA Macro)を開きます。
- 新しいモジュールに次のVBAコードを貼り付けます。
Sub Apply_VBA_Advanced_Filter_for_Unique_Values()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet4").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet4").Range("B14:E16")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng, Unique:=True
End Sub
ステップ2:
- 保存後、F5キーを押してプログラムを実行します。
- すると、一意の値だけが抽出された結果が得られます。
5. 数式による条件でVBA詳細フィルターを適用する
これまでの方法に加えて、数式を使った条件も適用できます。たとえば、合計金額(Total prices)が$100より大きいデータを抽出したい場合です。以下の手順で簡単に実現できます。
ステップ1:
- まず、Alt + F11を押してVBAエディタ(VBA Macro)を開きます。
- 新しいModuleを選択し、次のVBAコードを貼り付けます。
Sub Apply_VBA_Advanced_Filter_for_Formula()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet5").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet5").Range("B14:E15")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub
ステップ2:
- 続いて、プログラムを保存し、F5ボタンを押して結果を確認します。
ポイント: さらに、xlFilterCopyアクションを使えば、新しい範囲や新しいワークシートなど、任意の場所に結果を出力することも可能です。次のVBAコードを貼り付けて実行すると、Sheet6のB4:E11の範囲に結果が出力されます。
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet5").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet5").Range("B14:E15")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Criteria_Rng, CopyToRange:=Sheets("Sheet6").Range("B4:E11")
End Sub
- その結果、新しいワークシート「Sheet6」で最終的な結果を確認できます。
まとめ
以上、ExcelでVBAの詳細フィルターを使用して、複数の条件範囲をフィルターする方法について解説しました。ぜひご自身のデータでこれらの方法を実践してみてください。練習用ブックを参考に、学んだ内容を実際に試してみてください。皆さまのご支援が、今後もこのようなチュートリアルをお届けする原動力となります。
ご不明な点があれば、お気軽にお問い合わせください。コメント欄でご意見やご感想もお聞かせください。
Exceldemyスタッフができるだけ早くお答えいたします。
引き続き私たちと一緒に学び続けましょう。
関連記事
- Excel 詳細フィルター徹底解説[複数列・複数条件、数式の使用、ワイルドカード]
- Excelで詳細フィルターを使って空白セルを除外する方法(3つの簡単なテクニック)
- Excel VBA:範囲内の複数条件による詳細フィルター(5つの方法)
- Excelで詳細フィルターを使って別の場所にコピーする方法
-
複数の区切り文字を含むテキストファイルをExcelにインポートする3つの方法
この記事では、複数の区切り文字(カンマやセミコロンなど)を含むテキストファイルのデータを、Excelワークシートにインポートする3つの方法を解説します。Excelの標準機能とVBAコードの両方を使ったアプローチを紹介するので、状況に応じて最適な方法を選べるようになります。それでは、具体例を見ながら各方法を詳しく確認していきましょう。 複数の区切り文字を含むテキストファイルをExcelにインポートする3つの方法 ここでは、複数の区切り文字が混在したデータセットが保存されたテキストファイルを例にします。テキストファイル内のデータセットは以下のようなイメージです。 このデータセットは、ある店舗の販
-
Excelで複数の色を条件にデータをフィルターする2つの簡単な方法
この記事では、Microsoft Excelで複数の色を条件にデータをフィルターする方法を解説します。通常、特定の列を複数の色でフィルターすると、他の列も最初に適用したフィルターの影響を受けてしまい、思い通りの結果が得られないことがあります。色による複数条件のフィルタリングは少し工夫が必要ですが、この記事では誰でも実践できる2つの方法を、わかりやすい手順とともに紹介します。 Excelで複数の色を条件にフィルターする2つの方法 ここでは、営業担当者の氏名、担当地域、売上高がそれぞれB列・C列・E列に入力されたサンプルデータセットを使用します。このデータには、セルごとに異なる色が設定されています