ExcelマクロVBA技術解説
オートフィルタ(AutoFilter)の使い方まとめ

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2015-08-16

オートフィルタ(AutoFilter)の使い方まとめ

オートフィルタはエクセルの中でもデータ処理において非常に強力なものです、
特に大量データの処理には書くことのできない機能となっています。
しかし、使い方が難しく、またバージョン違いの影響が大きく、使いずらい物となっていて、問い合わせを受ける事も多いです。



今まで、オートフィルタに関する記事は、いくつかの書いてきました。
まずは、以下の記事をお読み頂きたい。

マクロの記録でVBA:第18回.オートフィルタ

マクロの記録でVBA:第19回.オートフィルタ2

マクロVBA入門:第89回.オートフィルタ(AutoFilter)

マクロVBAサンプル集:オートフィルター(AutoFilter)

マクロVBAサンプル集:日付のオートフィルタ(AutoFilter)

それぞれでVBAの記述について解説していますが、
とても覚えきれるものではありませんし、
かなり面倒なシロモノであることは間違いありません。

何が面倒かというと、
Criteria
の指定方法です。
Criteria1だけで、かつ数値・文字なら、それほどの問題はないのですが、
複数の値や日付のオートフィルタは、とても面倒なものです。

まず最初に考えるべきは、1フィールド(1列)で1値での絞り込みにすることを考えましょう。
どういう事かというと、
ある列の絞り込みで、"a"と"b"を絞り込みたいのなら、
作業列を追加して、"a" or "b" のとき1、それ以外は0を入れます。
そして、作業列で絞り込むようにします。
例.
A列で、"a"と"b"で絞り込むなら
とりあえず100行までとして、
B列に、
For i = 2 To 100
  If Cells(i, 1) = "a" Or Cells(i, 1) = "a" Then
    Cells(i, 2) = 1
  Else
    Cells(i, 2) = 0
  End If
Next

とします。
これでB列でオートフィルタすれば良いわけです。


しかし、ここで問題が発生します。
一行ずつにデータを入れていたら、大量データの時は、それだけで多大な時間がかかってしまいます。
それを解決させるには、配列を使用して、セルへの一括更新のテクニックを使います。
Dim i As Long
Dim ary
ary = Range("A1:B100")
For i = 2 To 100
  If ary(i, 1) = "a" Or ary(i, 1) = "a" Then
    ary(i, 2) = 1
  Else
    ary(i, 2) = 0
  End If
Next
Range("A1:B100") = ary

このようにセルとのやりとりは一括で処理するようにします。
これでB列でオートフィルタすれば高速処理が実現できます。
サンプルのコードはかなり簡易的に書いていますので適宜変更して下さいね。


エクセルの機能を活用しつつ、
オブジェクト操作による、マクロが遅いという問題点を解消します。

マクロVBAでは、単一機能を覚えても、なかなか使いこなせません。
複数の機能を上手に組み合わせることが最も重要で、最も難しいことになります。




同じテーマ「マクロVBA技術解説」の記事

ユーザー操作を制限する(Locked,Protect,ScrollArea)
シートに数式を設定する時のセル参照の指定方法
標準モジュールとシートモジュールの違い
オートフィルタ(AutoFilter)の使い方まとめ
複雑な条件(複数除外等)のオートフィルター(AutoFilter)
クリップボードを使わないセルのCopy
Rangeの使い方:最終行まで選択を例に
フルパスをディレクトリ、ファイル名、拡張子に分ける
Colorプロパティの設定値一覧
VBAを定型文で覚えよう
VBAこれだけは覚えておきたい必須基本例文10

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

「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)
Excelワークシート関数一覧(2010以降)|VBAリファレンス(4月22日)
クラスとCallByNameとポリモーフィズム(多態性)|VBA技術解説(4月6日)
VBAでのタイマー処理(SetTimer,OnTime)|VBA技術解説(4月3日)
クラスとイベントとマルチプロセス並列処理|VBA技術解説(4月2日)
エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)

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

1.ひらがな⇔カタカナの変換|エクセル基本操作
2.最終行の取得(End,Rows.Count)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • オートフィルタ(AutoFilter)の使い方まとめ

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


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






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

    本文下部へ