この記事では、エクセルのフィルターオプションの操作方法を解説します。
VBA初期設定
フィルターオプションについて
エクセルのオートフィルター機能は頻繁に使用されている思います。この機能は、フィールド(列)の検索条件が最大2条件で、複雑な条件設定はできません。
エクセルには、複雑な検索条件を実行するために、フィルターオプション機能(画面上では詳細設定)があります。検索条件は、AND条件やOR条件を複数結合でき、重複削除の機能もあります。
検索条件設定は、オートフィルターでは、データリストのヘッダー部で各フィールドの検索条件を設定しますが、フィルターオプションでは、検索条件設定領域を準備しなければいけません。
基本的には、リストのあるデータシートに検索条件設定領域を作成し、リスト自体を抽出します。
また、検索条件設定領域と抽出出力領域をデータシートとは別シートに設置することも可能です。
フィルターオプションの使用方法
ここでは、検索条件設定領域と抽出出力領域を別シートに設置し、リスト自体は変化させずに別シートに結果を表示させる方法を解説します。
1.テストブックの準備
まずは、エクセルブックを用意しデータシートと抽出シートを作成します。
2.抽出条件の設定
抽出シートを選択し、検索条件を入力します。
3.フィルターオプションの選択
抽出シートを開いてアクティブな状態にしてください。
データタブの[並べ替えとフィルター]の[詳細設定]をクリックすると、フィルターオプションの設定ダイアログが開きます。
4.リスト範囲の設定
リスト範囲の拡大ボタンをクリックします。
データシートを開き、リストの列範囲を選択した後、縮小ボタンをクリックするとリスト範囲が設定されます。
5.検索条件範囲の設定
検索条件範囲の拡大ボタンをクリックします。
抽出シートの検索条件のセル範囲を選択した後、縮小ボタンをクリックすると検索条件範囲が設定されます。表示が Criteria(条件)となる場合がありますが、設定には問題ありません。
6.抽出範囲の設定
抽出先の[指定した範囲]を選択し、抽出範囲の拡大ボタンをクリックします。
抽出シートの出力項目の行範囲を選択した後、縮小ボタンをクリックすると抽出範囲が設定されます。表示が Extract(抽出)となる場合がありますが、設定には問題ありません。
7.抽出結果の表示
フィルターオプションの設定ダイアログのOKボタンをクリックすると、抽出結果が表示されます。
検索条件の設定方法
AND条件は同一行に入力し、OR条件は異なる行に入力します。
1.AND条件
2.OR条件
検索条件には、比較演算子やワイルドカードが使用可能です。
3.比較演算子
4.ワイルドカード
検索条件をブランク(空欄)にすると、条件無し(全て)の抽出となります。
VBAユーザーフォームでの使用方法
検索条件設定領域と抽出出力領域を別シートに設置し、抽出結果を利用する方法を解説します。
※コードはサンプルなので動作しない箇所があります。
1.基本コード
抽出シート
VBA基本コード
Sub フィルターオプション() 'フィルターオプションの実行 Sheets("入庫データ").Columns("A:F").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("抽出シート").Range("A1:C2"), _ CopyToRange:=Sheets("抽出シート").Range("E1:H1"), _ Unique:=True End Sub
VBA実行後の抽出シート
2.期間リスト取得例
データベースで扱うクエリのような使用方法で、条件を渡してビュー(リスト)を受け取ることができます。受け取ったリストは閲覧等に使用できます。
サンプルでは、抽出シートの検索や抽出条件はブランクとしておき、条件設定はVBAで実行します。
抽出シート
VBAコード例
Sub 期間リスト() '検索条件の入力 Sheets("抽出シート").Range("A1").Value = "入庫日" Sheets("抽出シート").Range("A2").Value = ">=2022/11/01" Sheets("抽出シート").Range("B1").Value = "入庫日" Sheets("抽出シート").Range("B2").Value = "<=2022/11/30" '抽出条件の入力 Sheets("抽出シート").Range("E1").Value = "入庫日" Sheets("抽出シート").Range("F1").Value = "商品名称" Sheets("抽出シート").Range("G1").Value = "入庫数" Sheets("抽出シート").Range("H1").Value = "担当" 'フィルターオプションの実行 Sheets("入庫データ").Columns("A:F").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("抽出シート").Range("A1:B2"), _ CopyToRange:=Sheets("抽出シート").Range("E1:H1"), _ Unique:=False '抽出結果を変数に取り込み For i = 2 To LastRow 抽出結果(i - 2, 0) = Sheets("抽出シート").Range("E" & i).Value 抽出結果(i - 2, 1) = Sheets("抽出シート").Range("F" & i).Value 抽出結果(i - 2, 2) = Sheets("抽出シート").Range("G" & i).Value 抽出結果(i - 2, 3) = Sheets("抽出シート").Range("H" & i).Value Next 'リストボックスへの格納 lstInput.List = 抽出結果() End Sub
VBA実行後の抽出シート
3.入力リスト取得例
過去の入力値が、重複の無いリストとして受け取れるので、入力支援等に使用できます。
サンプルでは、抽出シートの検索や抽出条件はブランクとしておき、条件設定はVBAで実行します。
抽出シート
VBAコード例
Sub 入力リスト() '検索条件の入力 Sheets("抽出シート").Range("A1").Value = "入庫内訳" Sheets("抽出シート").Range("A2").Value = "" '抽出条件の入力 Sheets("抽出シート").Range("E1").Value = "入庫内訳" 'フィルターオプションの実行 Sheets("入庫データ").Columns("A:F").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("抽出シート").Range("A1:A2"), _ CopyToRange:=Sheets("抽出シート").Range("E1"), _ Unique:=True '抽出結果を変数に取り込み For i = 2 To LastRow 抽出結果(i - 2, 0) = Sheets("抽出シート").Range("E" & i).Value Next 'コンボボックスへの格納 cmbInputDetail.List = 抽出結果() End Sub
VBA実行後の抽出シート
概要解説に戻る
www.minizaiko.com