上は、2010or2007でのマクロの記録です。マクロVBAサンプル集:オートフィルター(AutoFilter)エクセルでは、定番機能のフィルターです。「Sheet1」のA列でフィルターし、「Sheet2」へコピーします。基本的なフィルターです。フィルターのセル範囲指定は、いろいろな指定が可能です。」も参考にして下さい。マクロVBAサンプル集:日付のオートフィルタ(AutoFilter)とても便利なオートフィルターですが、日付となると、結構大変です。以下の表で説明します。普通は、こんなように指定します。2007以降で追加された機能です。オートフィルタ(AutoFilter)の使い方まとめオートフィルタはエクセルの中でもデータ処理において非常に強力なものです、特に大量データの処理には書くことのできない機能となっています。使い方が難しく、またバージョン違いの影響が大きく、使いずらい物となっていて、問い合わせを受ける事も多いです。>オートフィルターを退避回復するVBAクラスの概要>以下の機能を実装します。Runtime」を参照設定しています。参照設定しない場合は、Object型にして、CreateObject("Scripting.Dictionary")としてください。Sub処理の要点と解説VBAコードについては、コード内コメントを見ながら解読してみてください。以下では、一番の難しい部分であるアイコンセットと日付について解説します。Operatorの種類XlAutoFilterOperator列挙になります。xlFilterCellColor「色フィルター」→「セルの色でフィルター」になります。xrxlfilterfontcolorになります。xlFilterIcon「色フィルター」→「セルのアイコンでフィルター」になります。選択したアイコンは、FilterのCriteriaに入っていません。入っているのはIndex(上から何番目のアイコンを選択したか)だけになります。フィルターに設定するときは、アイコンそのものを指定する必要があります。アイコンの情報がプロパティに見当たらないのです。そこで、そもそもの設定である条件付き書式から取得してくることにしました。条件付き書式は、行によって違う場合もあり得ます。表示されている(残っている)セルの条件付き書式のアイコンセットを取得してきています。他の列で、例えばテキストフィルターで適当な文字を入れて、絞り込み結果が0件となってしまう場合もあります。なると、表示されているアイコンが無いので、どのセルの情報を取得したらよいかが不明となってしまいます。そこで、これに対応するために、アイコンセットの条件退避は、他の列の条件クリアした後に行うようにしています。これにより、通常はアイコンセットが表示されるようになるので取得できるようになっています。日付の選択方法はとても複雑な指定が可能となっています。指定方法によっては、アイコンセットと同様にFilterのCriteriaに入っていない状態になります。以下のように、Criteria2に配列で設定するようにしています。アイコンセットと違い複数の選択ができるので、取得するのはより複雑となっています。日付データ型("年/月/日")で指定します。0:年の場合、指定した日付の年の全部が条件となります。1:月の場合、指定した日付の月の全部が条件となります。数値・日付の組み合わせおよび指定順は特に制限はないようです。重複していても、フィルターは正しく行われているようでした。今回のマクロVBAでは、年・月・日の指定をしっかりとやってます。長いVBAとなってしまいました。効率的な方法もありそうですが、フィルターの1条件なのでこれで良しとしました。時分秒のオートフィルターを使っていることはあまりないだろうという事で省略しました。私は時分秒でフィルターしたことは無いので、必要であれば挑戦してみてください。左側の日付列では、その後ろの日付絞り込みが解除されていないので、全ての日付を取得できません。フィルター再適用後の表示行数に違いはありません。本来のフィルター条件が一部欠落して退避復元されてしまう場合が出てきます。当該列以外を全てフィルタークリアしてから取得する必要があります。これを元のシートで行う事はできませんので、シートをコピーしてその先で行う等の工夫が必要になってきます。今回掲示のVBAでは、そこまでの対応はしていません。シートをコピーして、他の列のフィルターを解除してから値を取得するようにすれば良いでしょう。興味のある方は挑戦してみてください。「数値フィルター」の中の個別の指定については対応できておりません。平均より上下については対応できそうに思われますが、トップテンはかなり難しそうです。その他パターンが複雑なため全てを把握しきれていません。想定外も少なからず存在していると思われます。全ての組み合わせをテストすることが困難となります。指定パターンがはっきりすれば、個別対応を組み込むことで対応可能だと思います。最後に今回のVBAクラスは、1シートしか対応できません。複数シートで使う場合は、シートごとにクラスのインスタンスを作成する必要があります。2~3シートくらいならそれでも問題ないかもしれませんが、ブックの全シートを対象とするような場合、さすがに面倒になります。そこで、複数シートでの実装について続編を用意しました。見るTRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)無効な前方参照か、コンパイルされていない種類への参照です。Case)|VBA入門9.メッセージボックス(MsgBox関数)|VBA入門10.マクロとは?VBAとは?VBAでできること|VBA入門ホームマクロVBA応用編VBAクラス入門オートフィルターを退避回復するVBAクラスこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。アクセスランキングサイトマップ事業案内お問い合わせホームマクロVBA応用編VBAクラス入門オートフィルターを退避回復するVBAクラスこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。