ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

VBA Excelのフィルターオプションについて詳細解説! [VBA関連解説#03]

この記事では、エクセルのフィルターオプションの操作方法を解説します。


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