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

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

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

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

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



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

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


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





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

    本文下部へ

    ↑ PAGE TOP