オートフィルター
テーブル(ListObject)と通常のフィルター(AutoFilter)が混在したシートにおいて、AutoFilterの各種プロパティがどのような挙動になるかを検証します。特にWorksheetから直接実行するプロパティにご注意ください。
テーブルのフィルターをクリアする場合は、ListObject.AutoFilterのShowAllDataメソッドを実行します。これはフィルターの抽出状態に関わらず実行できますので、抽出がかかっていなくてもエラーにはなりません。
フィルターで抽出されているデータだけをコピーして別ブックに出力するマクロを紹介します。書式などを保持するため、一旦シートごとコピーして見出し以下を消し、再度元シートからコピーして実行します。
オートフィルターの各種判定には、設置判定にはAutoFilterModeプロパティ、いずれかの列の抽出判定にはFilterModeプロパティ、特定の列の抽出判定にはFilter.Onプロパティをそれぞれ調べます。
オートフィルターのデータ部分を取得するにはAutoFilter.Rangeを使用します。ただしこれは見出しもついてくるため、Offset+Resizeを利用して見出しを除外します。各列を取得する場合はそこからIntersectを使用します。
フィルター抽出中のデータをコピーする方法を解説します。Copyメソッドには「非表示行をコピーしない」機能があるため、 可視セルを取得する必要はなく、純粋なCopyメソッドで実行可能です。 抽出中のフィルターエリア全体をコピーする 見出し部分を除いてコ…
オートフィルターの最終行を取得するコードを解説します。これを一発で取得するプロパティは残念ながらありませんので、AutoFilter.Rangeでフィルターのかかっているエリアを取得し、そのエリアの最終行を取得する手法を用います。
本日20:00~VBAの悩みはVBAerに聞け(Zoom配信)に登壇いたします。他者がコーディングする様をリアルタイムに見、その場で解説を聞くためのイベントです。内容は、初級者向けに、オートフィルターの基本コードを解説します。
「10以上」や「15以上20以下」など、オートフィルターによる数値の条件・区間での絞り込みを、コピペして使えるユーティリティ関数にしたものを紹介します。お忙しい方は、ソースコードをコピーして、使い方のように呼び出すだけでOKです。
オートフィルターで抽出中のレコードを数えるユーティリティ関数を紹介します。レコードが抽出されているかどうかは、その行が表示されているかを調べればわかるので、「見えている行の数 ⇒ どこか1列の見えているセルの数」を数えることで計算します。
オートフィルターのクリア(すべての抽出をリセットして、すべての行を表示する)を、コピペして使えるユーティリティ関数にしたものを紹介します。お忙しい方はソースコードをコピーして、呼び出すだけでOKです。コードをしっかり読みたい方は、解説をどうぞ。
オートフィルターで一番基本となる「データの抽出」を、コピペして使えるユーティリティ関数にしたものを紹介します。オートフィルターはとても便利な機能で、しかも高速なので、使いこなせば読みやすくて速いマクロを作ることができます。