第89回.オートフィルタ(AutoFilter)
オートフィルタはExcelのデータベースとしての非常に強力な機能を提供してくれています、
VBAで、
必要なデータだけに絞り込んで他のシートにコピーしたり、
不要なデータを一括で削除したりする場合は、
とても高速に処理することができます。
VBAでオートフィルタを適用したり解除したりする場合には、
RangeオブジェクトのAutoFilterメソッドを使用します。
Range.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 です。 |
すべての引数を省略した場合
既に、オートフィルターのドロップダウン矢印を表示されている場合は、これを解除します。
使用例.
A1のアクティブ セル領域にオートフィルタを設定し、
1列(A列)を"1"で絞り込みます。
オートフィルタの操作
AutoFilterオブジェクト
AutoFilterModeプロパティ
これらを使用します。
AutoFilterオブジェクト
ワークシート.AutoFilter
これで、当該シートのAutoFilterオブジェクトにアクセスできるようになります。
AutoFilterオブジェクトのプロパティ・メソッド
メソッド | ApplyFilter | 指定された Autofilter オブジェクトを適用します。 |
ShowAllData | AutoFilter オブジェクトから返されるデータをすべて表示します。 | |
プロパティ | Application | 対象となるオブジェクトが指定されない場合は、Excel アプリケーション (Application オブジェクト) を返します。 対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。 OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。 値の取得のみ可能です。 |
Creator | 現在のオブジェクトが作成されたアプリケーションを示す 32 ビットの整数を取得します。 値の取得のみ可能です。長整数型 (Long) の値を使用します。 |
|
FilterMode | ワークシートがオートフィルター フィルター モードの場合、True を返します。値の取得のみ可能です。 ブール型 (Boolean) の値を使用します。 |
|
Filters | オートフィルター範囲でのすべてのフィルターを表す Filters コレクションを返します。 値の取得のみ可能です。 |
|
Parent | 指定されたオブジェクトの親オブジェクトを取得します。 値の取得のみ可能です。 |
|
Range | 指定された AutoFilter の適用先の範囲を表す Range オブジェクトを返します。 | |
Sort | AutoFilter コレクションの並べ替え列と並べ替え順序を取得します。 |
AutoFilterModeプロパティ
このプロティに値を設定することで、
オートフィルターの状態を取得・設定できます。
True : シートにオートフィルターの下向き矢印を表示します。
False : シートにオートフィルターの下向き矢印を消します。
使用例.
With Sheets("Sheet1") .Range("A1").AutoFilter Field:=1, Criteria1:="1" .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回.オートフィルタ
「マクロの記録で覚えるVBA」第19回.オートフィルタ2
日付のオートフィルタ(AutoFilter)
あまり複雑な条件でのフィルタはお勧めできません。
以下を参考に、効率よく理解しやすい方法を考えましょう。
オートフィルタ(AutoFilter)の使い方まとめ
複雑な条件(複数除外等)のオートフィルター(AutoFilter)
同じテーマ「マクロVBA入門」の記事
第86回.総合練習問題10
第87回.WorksheetFunction(ワークシート関数を使う)
第88回.並べ替え(Sort)
第90回.フィルタオプションの設定(AdvancedFilter)
第91回.条件付き書式(FormatCondition)
第92回.名前定義(Names)
第93回.ピボットテーブル(PivotTable)
第94回.コメント(Comment)
第95回.ハイパーリンク(Hyperlink)
第96回.グラフ(Chart)
新着記事 ・・・新着記事一覧を見る
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)
ファイルの操作|MOS VBAエキスパート対策(3月14日)
ユーザーフォームの各種イベント|Excelユーザーフォーム(3月13日)
レジストリの操作|MOS VBAエキスパート対策(3月12日)
変数と配列|MOS VBAエキスパート対策(3月12日)
Colorプロパティの設定値一覧|VBA技術解説(3月12日)
APIとOLEオートメーション|MOS VBAエキスパート対策(3月11日)
エラーへの対処|MOS VBAエキスパート対策(3月10日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.定数と型宣言文字(Const)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.繰り返し処理(For Next)|ExcelマクロVBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。