Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

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コードを貼り付けて実行すると、Sheet6B4: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で詳細フィルターを使って別の場所にコピーする方法
  1. 複数の区切り文字を含むテキストファイルをExcelにインポートする3つの方法

    この記事では、複数の区切り文字(カンマやセミコロンなど)を含むテキストファイルのデータを、Excelワークシートにインポートする3つの方法を解説します。Excelの標準機能とVBAコードの両方を使ったアプローチを紹介するので、状況に応じて最適な方法を選べるようになります。それでは、具体例を見ながら各方法を詳しく確認していきましょう。 複数の区切り文字を含むテキストファイルをExcelにインポートする3つの方法 ここでは、複数の区切り文字が混在したデータセットが保存されたテキストファイルを例にします。テキストファイル内のデータセットは以下のようなイメージです。 このデータセットは、ある店舗の販

  2. Excelで複数の色を条件にデータをフィルターする2つの簡単な方法

    この記事では、Microsoft Excelで複数の色を条件にデータをフィルターする方法を解説します。通常、特定の列を複数の色でフィルターすると、他の列も最初に適用したフィルターの影響を受けてしまい、思い通りの結果が得られないことがあります。色による複数条件のフィルタリングは少し工夫が必要ですが、この記事では誰でも実践できる2つの方法を、わかりやすい手順とともに紹介します。 Excelで複数の色を条件にフィルターする2つの方法 ここでは、営業担当者の氏名、担当地域、売上高がそれぞれB列・C列・E列に入力されたサンプルデータセットを使用します。このデータには、セルごとに異なる色が設定されています