Range.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
Rangeの部分にはオートフィルタを適用させる範囲のリストの左上のセルを表記します。
エクセルにある機能のオートフィルタと同様です。
Excelの97-2003までは1フィールドにおける複数条件は2つまでとなっています。
Excel2007以降で2つ以上の複数条件で抽出する場合は引数Operatorに定数xlFilterValuesを指定し、Criteria1の条件を配列としてArrayを用いて指定します。
また、異なるフィールド(列)に対して条件を設定する場合は、AutoFilterメソッドを2度連続して支持すれば複数フィールドに条件が設定できます。
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