Excel VBAでボタン一発オートフィルター

2020年5月6日

エクセルの「オートフィルタ」は、ワークシートのデータリストから特定の条件を満たすデータを絞り込んで抽出し、表示する機能です。
データが大きいとその中から条件に合うものを見つけるのは大変ですが、この機能を使えば簡単に抽出することができます。
今回はこの機能をVBAを使ってボタン一発で実行できるサンプルアプリを紹介します。

オートフィルタを設定するサンプルアプリの説明

「オートフィルタ設定」ボタンをクリックするとBクラスまたはCクラスの生徒で国語、英語、数学の点数が60点から80点未満にある生徒を抽出します。
「オートフィルタ解除」ボタンでフィルタを解除できます。

サンプルアプリのソースコード  コードの作成手順はこちら

「オートフィルタ設定」ボタンのソースコード

Sub ボタン1_Click()

   'ワークシートを指定する
    Dim Sh1 As Worksheet
    Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

   '変数を定義する
    Dim workEndR1
   'データの最終行を取得する
    workEndR1 = Sh1.Cells(Rows.Count, 2).End(xlUp).Row
    
   'オートフィルター範囲を指定する
    Dim Rng1 As Range
    Set Rng1 = Range(Sh1.Cells(5, 2), Sh1.Cells(workEndR1, 8))
    
    'オートフィルターの設定
    With Rng1
    
     '2列目が「B」又は「C」となっているデータを指定
     .AutoFilter Field:=2, Criteria1:="=B", Operator:=xlOr, Criteria2:="=C"
     
     '5列目、6列目、7列目が 60 以上 又は 80 未満となっているデータを指定
     .AutoFilter Field:=5, Criteria1:=">=60", Operator:=xlAnd, Criteria2:="<80"
     .AutoFilter Field:=6, Criteria1:=">=60", Operator:=xlAnd, Criteria2:="<80"
     .AutoFilter Field:=7, Criteria1:=">=60", Operator:=xlAnd, Criteria2:="<80"
     
    End With
     
End Sub

「オートフィルタ解除」ボタンのソースコード

Sub ボタン2_Click()

   'ワークシートを指定する
    Dim Sh1 As Worksheet
    Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

   '変数を定義する
    Dim workEndR1
   'データの最終行を取得する
    workEndR1 = Sh1.Cells(Rows.Count, 2).End(xlUp).Row
    
   'オートフィルター範囲を指定する
    Dim Rng1 As Range
    Set Rng1 = Range(Sh1.Cells(5, 2), Sh1.Cells(workEndR1, 8))
   
   'オートフィルターが有効となっているか無効となっているか確認する
    If (ActiveSheet.AutoFilterMode = False) Then
        Exit Sub
    End If
    
   'オートフィルターが有効となっている場合オートフィルターを無効にする
    Rng1.AutoFilter
     
End Sub

Range.AutoFilter メソッドの説明

 Range(セル範囲).AutoFilter Field:= 絞り込む列番号, Criteria1:= 絞り込む文字列
  例:
  Range(“A1″).AutoFilter Field:=1, Criteria1:="田中", Operator:=xlOr, Criteria2:="佐藤"
  Range(“A1″).AutoFilter Field:=2, Criteria1:=">=25″

引数の説明

引数定数説明
Fieldフィルタの対象となるフィールド番号を整数で指定。
表の左端列が「1」
Criteria1抽出条件となる文字列を指定。
“=" と指定すると、空白セルが抽出。
“" と指定すると空白以外のフィールドが抽出。
省略すると、抽出条件はALL。
OperatorxlAndAnd条件
xlOrOr条件
xlTop10Items上位トップ10
xlBottom10Items下位ワースト10
xlTop10Percent(5)上位トップ10%
xlBottom10Percent(6)下位ワースト10%
Criteria22 番目の抽出条件となる文字列を指定
VisibleDropDownTRUEフィールドにドロップダウン矢印を表示
FALSEフィールドにドロップダウン矢印を非表示

フィルターを解除する場合は、AutoFilterメソッドを引数なしで使います。
  Range.AutoFilter
フィルターの解除ではなく、絞り込み結果のみクリアしたいときはShowAllDataメソッドを使います。
  Activesheet.ShowAllData