VBA オートフィルタ(autofilter)の使い方



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

Rangeの部分にはオートフィルタを適用させる範囲のリストの左上のセルを表記します。
エクセルにある機能のオートフィルタと同様です。
Excelの97-2003までは1フィールドにおける複数条件は2つまでとなっています。
Excel2007以降で2つ以上の複数条件で抽出する場合は引数Operatorに定数xlFilterValuesを指定し、Criteria1の条件を配列としてArrayを用いて指定します。

また、異なるフィールド(列)に対して条件を設定する場合は、AutoFilterメソッドを2度連続して支持すれば複数フィールドに条件が設定できます。

名前 説明 備考
Field フィルタの対象となるフィールド番号 整数 範囲内の左端の列が"1"順に2,3・・・
Criteria1 抽出条件となる文字列(1) 文字列 省略可(既定値:全て対象)
Operator フィルタの種類、抽出条件 XlAutoFilterOperator
省略可(既定値:xlAnd)
Criteria2 抽出条件となる文字列(2)
(Criteria1とOperatorが必要)
文字列 省略可
VisibleDropDown オートフィルタのドロップダウン矢印
表示有無
True or
False
省略可(表示する)
(既定値:True)
引数一覧


例)オートフィルタの条件を2つ設定して該当するレコードのみのデータを作成
Sub AFTes()
Dim ws1 As Worksheet, ws2 As Worksheet
    
   'Worksheetをセット
    Set ws1 = ActiveWorkbook.Worksheets(1)
    Set ws2 = ActiveWorkbook.Worksheets(2)
    
    'オートフィルタ
    'セルA1から始まるリストで3列目に東証1部か東証2部を表示
    'Field:=3 3列目
    'Criteria1・Criteria2は条件
    'Operator:=xlOr は Criteria1・Criteria2の論理演算子OR
    ws1.Range("A1").AutoFilter Field:=3, Criteria1:="東証1部", _
    Operator:=xlOr, Criteria2:="東証2部"
    
    
    '表示されている部分のみコピーしてSheet2に貼り付け
    ws.Range("A1").CurrentRegion.Columns("A:H").Copy _
    Destination:=ws2.Range("A1")
    
End Sub



◯エラー
抽出する条件と合致するものがない場合には
「実行時エラー '1004':
RangeクラスのAutoFilterメソッドが失敗しました。」
というエラーが出るのでない場合のエラー処理等の記述が必要になる場合もあるかと思います。



解除方法
下記はオートフィルターモードを判定してフィルタを解除する方法です。
    If ActiveSheet.AutoFilter.FilterMode = True Then
        ActiveSheet.Range("a1").AutoFilter
    End If

クリアする方法
オートフィルターの状態のまま全てのフィルタリングをクリアにする方法です。
Sub autof()
    'アクティブシートのフィルタをクリアにする
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

End Sub