セルのAutoFilterメソッド

表などに対して、ある条件でフィルタをかけたい場合、AutoFilter メソッドを使用します。フィルタをかけると、フィルタの条件に合致した行だけ表示され、それ以外の行は非表示になります。

引数をすべて省略するとフィルタはかけずに、ドロップダウンの矢印のみ表示します。ドロップダウンの矢印を表示すると、手動でフィルタをかけることができます。

AutoFilter を解除したい場合は ワークシートのAutoFilterModeプロパティ を使用します。

オートフィルタ適用後の行や列の表示・非表示を判断するには Hiddenプロパティ を使用します。

スポンサーリンク

AutoFilterメソッドの使用方法

構文
object.AutoFilter _
    [, Field] [, Criteria1] [, Operator] [, Criteria2] [, VisibleDropDown]

※objectはセルまたはレンジオブジェクトを表す変数

引数名 省略 定数/データ型 説明
Field Variant型 フィルタの対象となるフィールド番号を整数で指定します。フィールド番号は、リストの左側’1’から始まります。
Criteria1 Variant型 抽出条件となる文字列を指定します。 “=” と指定すると、空白セルが抽出され、”<>” と指定すると空白以外のフィールドが抽出されます。 省略すると、抽出条件は All になります。
Operator xlAnd 抽出条件 1 と抽出条件 2 の論理演算子 AND
xlBottom10Items 表示される最低値項目 (抽出条件 1 で指定される項目数)
xlBottom10Percent 表示される最低値項目 (抽出条件 1 で指定される割合)
xlFilterCellColor セルの色
xlFilterDynamic 動的フィルタ
xlFilterFontColor フォントの色
xlFilterIcon フィルタ アイコン
xlFilterValues フィルタの値
xlOr 抽出条件 1 または抽出条件 2 の論理演算子 OR
xlTop10Items 表示される最高値項目 (抽出条件 1 で指定される項目数
xlTop10Percent 表示される最高値項目 (抽出条件 1 で指定される割合)
Criteria2 Variant型 2 番目の抽出条件となる文字列を指定します。 引数 Criteria1 および引数 Operator と組み合わせて使い、複合抽出条件を指定します。
VisibleDropDown Variant型 True を指定すると、フィルタのフィールドにあるオートフィルタのドロップダウン矢印を表示します。 False を指定すると、ドロップダウン矢印を表示しません。 既定値は True です。

AutoFilterメソッドの使用例

1項目1条件

1つの項目(列)に対して1つの条件でフィルタをかける例です。以下の例では1月の売上が100万以上の行を表示します。

Sub sample_b06h_01()
    With ActiveSheet
        'オートフィルター設定済を考慮して、一旦オートフィルターを解除
        .AutoFilterMode = False

        'ヘッダー行(3行目)に対してAutoFilterメソッドを使用し、
        '1月(Field=2)の売上が100万以上を表示
        .Rows(3).AutoFilter _
            Field:=2, _
            Criteria1:=">=100"
    End With
End Sub

 ワークシートのAutoFilterModeプロパティ
Withステートメント

テストデータ
テストデータ
sample_b06h_01 実行結果
sample_b06h_01 実行結果

1項目2条件

1つの項目(列)に対して2つの条件(AND)でフィルタをかける例です。以下の例では1月の売上が100万以上、200万未満の行を表示します。

Sub sample_b06h_02()
    With ActiveSheet
        'オートフィルター設定済を考慮して、一旦オートフィルターを解除
        .AutoFilterMode = False

        'ヘッダー行(3行目)に対してAutoFilterメソッドを使用し、
        '1月(Field=2)の売上が100万以上かつ200万未満を表示
        .Rows(3).AutoFilter _
            Field:=2, _
            Criteria1:=">=100", _
            Operator:=xlAnd, _
            Criteria2:="<200"
    End With
End Sub

 ワークシートのAutoFilterModeプロパティ
Withステートメント

テストデータ
テストデータ
sample_b06h_02 実行結果
sample_b06h_02 実行結果

2項目1条件

2つの項目(列)に対してそれぞれ1つの条件でフィルタをかける例です。以下の例では1月と3月の売上がともに100万以上の行を表示します。

Sub sample_b06h_03()
    With ActiveSheet
        'オートフィルター設定済を考慮して、一旦オートフィルターを解除
        .AutoFilterMode = False

        'ヘッダー行(3行目)に対してAutoFilterメソッドを使用し、
        '1月(Field=2)と3月(Field=4)の売上がともに100万以上を表示
        .Rows(3).AutoFilter _
            Field:=2, _
            Criteria1:=">=100"

        .Rows(3).AutoFilter _
            Field:=4, _
            Criteria1:=">=100"
    End With
End Sub

 ワークシートのAutoFilterModeプロパティ
Withステートメント

テストデータ
テストデータ
sample_b06h_03 実行結果
sample_b06h_03 実行結果

上位3つを抽出

1つの項目(列)に対して1つの条件でフィルタをかける例です。以下の例では1月の売上上位3つを表示します。

上位3つというフィルタ条件を指定して AutoFilter メソッドを実行すると原因不明のエラーが発生します。以下の例では、一度引数なしで AutoFilter メソッドを実行してから、再度フィルタ条件を指定して AutoFilter メソッドを実行することでこのエラーを回避しています。この方法が正しいかどうかはわからず、このようにするとエラーが発生しないというものです。何か原因がわかり次第、内容を更新したいと思います。

Sub sample_b06h_04()
    With ActiveSheet
        'オートフィルター設定済を考慮して、一旦オートフィルターを解除
        .AutoFilterMode = False

        With .Rows(3)   'ヘッダーの行を指定すればok
            'エラー回避のため、一度オートフィルターだけ設定
            .AutoFilter

            '1月(Field=2)の売上上位3つを表示
            .AutoFilter _
                Field:=2, _
                Criteria1:="3", _
                Operator:=xlTop10Items
        End With
    End With
End Sub

 ワークシートのAutoFilterModeプロパティ
Withステートメント

テストデータ
テストデータ
sample_b06h_04 実行結果
sample_b06h_04 実行結果
タイトルとURLをコピーしました