VBAからオートフィルタで条件設定する方法を紹介します。
今回は、基本となる文字列での条件設定、加えてワイルドカード、否定、複数条件(論理和、論理積)まで一気に解説します。
事前準備
データを準備します。こちらのデータは、テストデータ生成サイトで作成しました。
オートフィルタの基礎
オートフィルタを行うには、AutoFilter関数を利用します。構文は以下となります。AutoFilter引数およびXlAutoFilterOperatorの定数の説明を載せますが、さらっと流してください。サンプルプログラムを見てもらったほうが理解が早いと思います。
Range.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)
AutoFilterの引数
引数名 | 必須/省略可能 | データ型 | 説明 |
---|---|---|---|
Field | 省略可 | Variant | フィルター対象となる列番号を指定します。リストの左側から1から始まります。 |
Criteria1 | 省略可 | Variant | 抽出条件を指定します。(例えば”101″ などの文字列)。 |
Operator | 省略可 | XlAutoFilterOperator | XlAutoFilterOperatorの定数でフィルターの種類を指定します。 |
Criteria2 | 省略可 | Variant | Criteria1およびOperatorと組み合わせて、2 番目の抽出条件を指定します。複合抽出条件を指定できます。 |
SubField | 省略可 | Variant | 使用することはないので説明省略 |
VisibleDropDown | 省略可 | Variant | True/Falseを指定する。ドロップダウン矢印の表示非表示を生業します。既定値はTrueです。 |
XlAutoFilterOperatorの定数
名前 | 説明 |
---|---|
xland | criteria1およびCriteria2の論理積 |
xlor | criteria1またはCriteria2の論理和 |
xlfiltervalues | フィルターの値 |
xlBottom10Items | 表示される最低値項目(引数criteria1で指定されているアイテムの数) |
xlBottom10Percent | 表示される最低値項目(引数criteria1で指定される割合) |
xlfiltercellcolor | セルの色 |
xlfilterdynamic | 動的フィルター |
xlfilterfontcolor | フォントの色 |
xlfiltericon | フィルターアイコン |
xlTop10Items | 表示される最高値項目(引数criteria1で指定されているアイテムの数) |
xlTop10Percent | 表示される最高値項目(引数criteria1で指定される割合) |
サンプルプログラム
普通に文字列でフィルタリングです。数値の4は、4列目を意味します。
Sub sample1()
' 指定列を文字列でフィルタ
Range("A1").AutoFilter 4, "秋田県"
End Sub
ワイルドカード(* または ?)を使いたい場合は、そのまま指定でOKです。
Sub sample2()
' 指定列を文字列でフィルタ(ワイルドカード)
Range("A1").AutoFilter 4, "*府"
End Sub
否定を使いたい場合は、<>を指定します。ワイルドカードとの組み合わせも可能です。
Sub sample3()
' 指定列を文字列でフィルタ(否定)
Range("A1").AutoFilter 4, "<>*県"
End Sub
複数条件(論理和)を使いたい場合は、xlOrを指定します。引数は4つに増えます。
Sub sample4()
' 指定列を2つの文字列でフィルタ(論理和:xlOr)
Range("A1").AutoFilter 4, "秋田県", xlOr, "山形県"
End Sub
複数条件(論理積)を使いたい場合は、xlAndを指定します。
Sub sample5()
' 指定列を2つの文字列でフィルタ(論理積:xlAnd)
Range("A1").AutoFilter 4, "大*", xlAnd, "*県"
End Sub
3つ以上の条件を指定したい場合は、配列およびxlFilterValuesを指定します。
Sub sample6()
' 指定列を3つ以上の文字列でフィルタ(論理和:XlFilterValues)
Range("A1").AutoFilter 4, Array("東京都", "千葉県", "神奈川県", "埼玉県"), xlFilterValues
End Sub