Excel VBA AutoFilterメソッドでオートフィルタを設定する

オートフィルタ操作

今回はAutoFilterメソッドでオートフィルタを設定する方法をご説明します。

オートフィルタは通常のExcel操作でも使用頻度が非常に高く、VBAでも便利且つ大量のデータにも高速で処理が可能になるなど非常に便利です。

とても情報量が多いため、機能をすべて説明しようとすると長くなりますので、分割でご説明します。

その他のAutoFilterメソッドでオートフィルタを操作する方法は次の記事をご覧ください。

1.AutoFilterメソッドとは

AutoFilterメソッドとは、オートフィルタを使ってリストをフィルター処理します。

構文は次のように記述します。

Range.AutoFilter (Field, Criteria1, Operator, Criteria2, SubField, VisibleDropDown)

引数一覧

下の一覧にある「SubField」はExcel2016から追加されましたが、新しいデータ型「株式」の[量]フィールドや「地理」の[人工]フィールドなどに条件を、指定するときに使う引数ですので、ほとんど使用する事はないともいます。

引数名必須/省略可能データ型説明
Field省略可能Variantフィルターの対象となるフィールド番号を整数で指定します。
フィールド番号はリストの左側から始まり、一番左を1とします。
Criteria1省略可能Variant 抽出条件となる文字列を指定します。
「=」で空白セルが抽出され、「<>」で空白以外を抽出します。
Operator省略可能XlAutoFilterOperatorフィルターの種類をXlAutoFilterOperatorの定数で指定します。
Criteria2省略可能Variant 2 番目の抽出条件となる文字列を指定します。
引数 Criteria1 および引数 Operator と組み合わせて使い、複合抽出条件を 構築します。
SubFieldOptional(省略可)Variant抽出条件を適用するデータ型のフィールド
(たとえば、地理学の[人口]フィールド、または株価の[量]
フィールド)。
この値を省略すると、”(表示値)”が対象になります。
VisibleDropDown省略可能VariantTrueを指定すると、フィルター処理されるフィールドのオートフィルターのドロップダウン矢印を表示します。
Falseを指定すると、抽出されるフィールドのオートフィルターのドロップダウン矢印を非表示にします。
既定値はTrueです。

XlAutoFilterOperatorの定数

定数説明
xlAnd抽出条件1と抽出条件2の論理演算子ANDで抽出します。
xlBottom10Items抽出条件1で指定される最低値の項目数のレコード数を抽出します。
xlBottom10Percent抽出条件1で指定される最低値「%」のレコード数を抽出します。
xlFilterCellColorセルの色
xlFilterDynamic動的フィルタ
xlFilterFontColorフォントの色
xlFilterIconフィルタアイコン
xlFilterValuesフィルタの値
xlOr抽出条件1または抽出条件2の論理演算子ORで抽出します。
xlTop10Items抽出条件1で指定される最高値の項目数のレコード数を抽出します。
xlTop10Percent抽出条件1で指定される最高値「%」のレコード数を抽出します。

2.AutoFilterメソッドのデータ範囲を指定する

空白行を考慮して範囲指定する

次のコードは、下図のようなデータがある場合にA1~B5000(最終行)までを範囲指定します。

最終行を取得している理由は「空白行」の存在を考慮してです。

もし空白行が存在すると、途中で範囲が途切れてしまいます。

また、「Field:=1」で指定した範囲の1列目を「Criteria1:=」で指定した文字列で絞り込んでいます。

Sub Sample1()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 2)) _
            .AutoFilter Field:=1, Criteria1:="店舗B"

End Sub

空白行がない想定でデータ範囲を指定する

次はデータ範囲に空白行がない場合に次のようにデータ範囲を指定する事ができます。

Sub Sample2()

Cells(1, 1).AutoFilter Field:=1, Criteria1:="店舗B"

End Sub

たったのこれだけです。

3.引数名を省略する

引数名を省略する事ができます。

「AutoFilterメソッド」は引数を左から順番に指定していきます。

引数一覧に省略可能と記載していますが、指定する場合には必要な引数のみ指定する、ということはできません。

「AutoFilterメソッド」は引数が多いのと、一つ一つの引数名が多いためすべて書く場合はそれなりにコードが長くなります。

そのため省略して記述する事で、よりシンプルに記述する事ができます。

省略していない次のコードを

Sub Sample3()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 2)) _
            .AutoFilter Field:=1, Criteria1:="店舗B", Operator:=xlOr, Criteria2:="店舗C"

End Sub

次の様に省略する事でシンプルにできます。

Sub Sample4()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 2)) _
            .AutoFilter 1, "店舗B", xlOr, "店舗C"

End Sub

4.引数を省略しなくても見やすいコードにする

3で引数の省略を記載しましたが、指定する列や項目が多くなるとどの条件が、どこを指しているのか正直「パッと見」で理解できなくなります。

そのため、これは好みになってきますが、次の様に引数を省略しなくても見やすいコードで書くことで、指定する条件を理解しやすくします。

Sub Sample5()

Dim MaxRow  As Long

MaxRow = Cells(Rows.Count, 1).End(xlUp).Row

Range(Cells(1, 1), Cells(MaxRow, 2)) _
            .AutoFilter Field:=1, _
            Criteria1:="店舗B", _
            Operator:=xlOr, _
            Criteria2:="店舗C"

End Sub

この様に「 _」半角スペース アンダーバー と記載する事でコードを改行できますので、上の様に各条件で改行する事で条件の指定の可読性が上がります。

タイトルとURLをコピーしました