VBA入門
オートフィルター(AutoFilter)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2021-10-28

第89回.オートフィルター(AutoFilter)


マクロ VBA オートフィルタ

オートフィルタはExcelのデータベースとしての非常に強力な機能が提供されています。
マクロVBAで、必要なデータだけに絞り込んで他のシートにコピーしたり、
不要なデータを一括で削除したりする場合は、とても高速に処理することができます。


マクロVBAでオートフィルタを操作するには、以下のメソッド・プロパティおよびオブジェクトを使用します。

RangeオブジェクトのAutoFilterメソッド

AutoFilterメソッドは、シートにオートフィルタを適用・解除します。

ワークシートのAutoFilterModeプロパティ

オートフィルターの状態を取得・設定できます。

AutoFilterオブジェクト

ワークシートに適用されているオートフィルタのオブジェクトです。

以下順に説明します。



Range.AutoFilterメソッド

AutoFilterメソッドは、シートにオートフィルタを適用したり、解除します。

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

Field フィルターの対象となるフィールド番号を整数で指定します。
フィールド番号は、リストの左側から始まります。
つまり、最も左側にあるフィールドはフィールド番号 1 になります。
Criteria1 抽出条件となる文字列 ("101"など) を指定します。
"="と指定すると、空白セルが抽出され、"<>" と指定すると空白以外のフィールドが抽出されます。
この引数を省略すると、抽出条件は All になります。
引数OperatorにxlTop10Itemsが指定されている場合は、引数 Criteria1に項目数を指定します (たとえば "10")。
Operator

フィルターの種類をXlAutoFilterOperatorクラスの定数のいずれかで指定します。

Criteria2 2 番目の抽出条件となる文字列を指定します。
引数 Criteria1および引数 Operatorと組み合わせて使い、複合抽出条件を指定します。
VisibleDropDown Trueを指定すると、フィルターのフィールドにあるオートフィルターのドロップダウン矢印を表示します。
Falseを指定すると、フィルターのフィールドにオートフィルターのドロップダウン矢印を非表示にします。
既定値は True です。

Operatorに指定するXlAutoFilterOperatorクラスの定数
xlAnd 抽出条件 1 と抽出条件 2 の論理演算子 AND
xlBottom10Items 表示される最低値項目 (抽出条件 1 で指定される項目数)
xlBottom10Percent 表示される最低値項目 (抽出条件 1 で指定される割合)
xlFilterCellColor セルの色
xlFilterDynamic 動的フィルター
xlFilterFontColor フォントの色
xlFilterIcon フィルター アイコン
xlFilterValues フィルターの値
xlOr 抽出条件 1 または抽出条件 2 の論理演算子 OR
xlTop10Items 表示される最高値項目 (抽出条件 1 で指定される項目数)
xlTop10Percent 表示される最高値項目 (抽出条件 1 で指定される割合)

すべての引数を省略した場合

このメソッドは指定したセル範囲でのオートフィルターのドロップダウン矢印を表示します。
既に、オートフィルターのドロップダウン矢印を表示されている場合は、これを解除します。

AutoFilterメソッドの使用例

Range("A1").AutoFilter Field:=1, Criteria1:="1", Operator:=xlFilterValues

A1のアクティブ セル領域にオートフィルタを設定し、
1列(A列)を"1"で絞り込みます。


AutoFilterModeプロパティ

ワークシートのプロパティに、AutoFilterModeプロパティがあります。
このプロティに値を設定することで、オートフィルターの状態を取得・設定できます。

True : シートにオートフィルターの下向き矢印を表示します。
False : シートにオートフィルターの下向き矢印を消します。


AutoFilterオブジェクト

ワークシートにオートフィルターが適用されている場合に、そのオートフィルタのオブジェクトになります。

ワークシート.AutoFilter

このAutoFilter自体はプロパティですが、このプロパティを経由してAutoFilterオブジェクトにアクセスできます。

AutoFilterオブジェクトのメソッド
ApplyFilter 指定された Autofilter オブジェクトを適用します。
ShowAllData AutoFilter オブジェクトから返されるデータをすべて表示します。

AutoFilterオブジェクトのプロパティ
Application 対象となるオブジェクトが指定されない場合は、Excel アプリケーション (Application オブジェクト) を返します。
対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。
OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。
値の取得のみ可能です。
Creator 現在のオブジェクトが作成されたアプリケーションを示す 32 ビットの整数を取得します。
値の取得のみ可能です。長整数型 (Long) の値を使用します。
FilterMode ワークシートがオートフィルター フィルター モードの場合、True を返します。値の取得のみ可能です。
ブール型 (Boolean) の値を使用します。
Filters オートフィルター範囲でのすべてのフィルターを表す Filters コレクションを返します。
値の取得のみ可能です。
Parent 指定されたオブジェクトの親オブジェクトを取得します。
値の取得のみ可能です。
Range 指定された AutoFilter の適用先の範囲を表す Range オブジェクトを返します。
Sort AutoFilter コレクションの並べ替え列と並べ替え順序を取得します。


オートフィルタのVBA使用例

With Sheets("Sheet1")
  'Sheet1のA1のアクティブ セル領域の1列目を"1"で絞り込み
  .Range("A1").AutoFilter Field:=1, Criteria1:="1"
  'Sheet2へコピー
  .Range("A1").CurrentRegion.Copy
  Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues
  'オートフィルタを解除
  .AutoFilterMode = False
End With
Application.CutCopyMode = False

Sheet1のA1のアクティブ セル領域の、1列目を"1"で絞り込み、
Sheet2へコピーしています。
.AutoFilterMode = Falseは、.Range("A1").AutoFilterでも同じです。

Dim i As Long, Title As String
With ActiveSheet
  'オートフィルタが適用されているか判定
  If .AutoFilterMode Then
    'オートフィルタの列数
    For i = 1 To .AutoFilter.Filters.Count
      '絞り込みされているか判定
      If .AutoFilter.Filters(i).On Then
        '全てを表示
        .AutoFilter.ShowAllData
        Exit For
      End If
    Next i
  End If
End With

オートフィルタで絞り込まれている場合、絞り込みを解除し全て表示しています。


日付のフィルタ

日付でフィルタする場合は、非常に面倒です。
以下を参考にして下さい。
「マクロの記録で覚えるVBA」第18回.オートフィルタ
フィルタをやりましょう。まあ、表計算らしい機能ではあります。では、マクロの記録です、データは何でも良いでしょう。1.マクロの記録 2.フィルタ 3.1のみ選択…たまたま1のデータを入れただけです。4.記録終了 作成れたマクロは、2003の場合は、Selection.AutoFilterSelection.AutoF…
「マクロの記録で覚えるVBA」第19回.オートフィルタ2
前回の続きで、フィルタをやります。以下の表で説明します。では、マクロの記録です。まずは、日付の絞り込みです。1.マクロの記録 2.A1を選択 3.フィルタ 4.2011/6/5のみ選択 5.記録終了 作成れたマクロは… (コメント行は省略します) 上は、2010or2007でのマクロの記録です。
日付のオートフィルタ(AutoFilter)
とても便利なオートフィルターですが、日付となると、結構大変です。以下の表で説明します。普通は、こんなように指定します。Operator:=xlFilterValues は2007以降で追加された機能です。


オートフィルタまとめ

あまり複雑な条件でのフィルタはお勧めできません。
以下を参考に、効率よく理解しやすい方法を考えましょう。
オートフィルタ(AutoFilter)の使い方まとめ
オートフィルタはエクセルの中でもデータ処理において非常に強力なものです、特に大量データの処理には書くことのできない機能となっています。しかし、使い方が難しく、またバージョン違いの影響が大きく、使いずらい物となっていて、問い合わせを受ける事も多いです。
複雑な条件(複数除外等)のオートフィルター(AutoFilter)
・"A","C"で絞り込む場合 ・"A","C"以外で絞り込む場合 ・"A","C","E"以外で絞り込む場合 ・作業列を追加

以下はVBAクラスですが、オートフィルタの細部を扱っていますので、
オートフィルタの詳しい情報や設定方法を知りたい場合には参考になると思います。
オートフィルタを退避回復するVBAクラス
・オートフィルターに関するページ ・オートフィルターを退避回復するVBAクラスの概要 ・オートフィルターを退避し回復するクラスのVBAコード ・クラスを利用する標準モジュールのVBAコード ・処理の要点と解説 ・最後に




同じテーマ「マクロVBA入門」の記事

第85回.結合セルの扱い

・セル結合に関する、メソッド・プロパティ ・セル結合のマクロVBA使用例 ・セル結合時の値消去 ・指定セル範囲に結合セルが存在するか判定するマクロVBA ・セル結合時のOffsetとResizeの注意点
第86回.総合練習問題10
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第88回.並べ替え(Sort)
・Range.Sortメソッド・・・Excel2003までのソート ・2007以降の並べ替え ・Excel2003までのSortとExcel2007以降のSortの使い分け
第89回.オートフィルター(AutoFilter)
第90回.フィルターオプションの設定(AdvancedFilter)
・フィルター詳細設定の使い方 ・Range.AdvancedFilter メソッド ・フィルターオプションの設定の関連記事
第91回.条件付き書式(FormatCondition)
・FormatConditionsコレクション ・FormatConditionオブジェクト ・条件付き書式のマクロVBA実践例 ・マクロVBAの条件付き書式について
第126回.入力規則(Validation)
・Validationオブジェクト ・入力規則(Validation)の使用例 ・入力規則を設定しても無効データが入力されてしまう場合への対処
第92回.名前定義(Names)
・Namesコレクション ・Nameオブジェクト ・RangeオブジェクトのNameプロパティ ・名前定義を使ったRangeの書き方 ・シートコピー時は名前定義に注意 ・名前定義の実践例
第93回.ピボットテーブル(PivotTable)
・ピボットテーブル(PivotTable)を構成するオブジェクト群 ・Excel2010のピボットテーブル(PivotTable)のマクロ記録 ・Excel2003のピボットテーブル(PivotTable)のマクロ記録 ・Excel2010とExcel2003のピボットテーブルVBAの違いについて ・ピボットテーブル(PivotTable)のマクロVBA実践例
第94回.コメント(Comment)
・コメント(Comment)に関する各種オブジェクト ・コメント(Comment)の挿入 ・コメント(Comment)の削除 ・コメント(Comment)の編集 ・コメント(Comment)実践例
第95回.ハイパーリンク(Hyperlink)
・Hyperlinksコレクション ・Hyperlinkオブジェクト ・ハイパーリンクの追加 ・ハイパーリンクの削除 ・既に設定されているハイパーリンクの扱い方


新着記事NEW ・・・新着記事一覧を見る

無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ