オートフィルターの状態を取得するFunction
オートフィルターの状態を取得する
元データが置いてあるワークシートがオートフィルターで絞り込まれているのに、それに気づかずにマクロを実行してわけのわからない結果が出て(゚Д゚)ポカーンとなったことはないだろうか。
わしはある!!!!!!!!
そんなわけで、オートフィルタの状態を表すオブジェクト、プロパティについて調べてみた。
Worksheet.AutoFilterオブジェクト
コチラによると、
指定されたワークシートのオートフィルターを示します。
AutoFilter オブジェクトを取得するには、 AutoFilter プロパティを使用します。
とのこと。
AutoFilter オブジェクトを取得するには、 AutoFilter プロパティを使用します
というのがちょっと分かりにくいけれど、
WorksheetオブジェクトのAutoFilterプロパティを参照すると、つまり、
「[Worksheetオブジェクト].AutoFilter」と書くと、
AutoFilterオブジェクトが返る
という理解で良いかと。
まあ、最初の指定されたワークシートのオートフィルターを示します
というのもよく分からんなw
「オートフィルターそのもの」とでも考えたら良いのかな。
AutoFilter.FilterModeプロパティ
再びコチラによると、
ワークシートがオートフィルター フィルター モードの場合、 True を返します。値の取得のみ可能です。ブール型 ( Boolean ) の値を使用します。
構文
式 . FilterMode
式AutoFilter オブジェクトを表す変数。
とのこと。
「フィルターモード」??? 何それ???(←素人)
フィルターモード
コチラによると、どうもフィルターで絞り込まれた状態を「フィルターモード」と言うらしい。
アッーーー!!
そ、そういえば……、
こういうことかー!
はい、その程度のことも知らなかったExcel初心者ですよ、私は。
ここまでのまとめ
Worksheet.AutoFilterオブジェクトのFilterModeプロパティがTrueだったら、そのシートはどこかの列がオートフィルターで絞り込まれた状態であるということですね。
オートフィルターの状態を調べるFunction
無駄にFunction化する。
リスト1 標準モジュール
Public Function isAutoFiltered(targetSheet As Worksheet) As Boolean If targetSheet.AutoFilter.FilterMode Then isAutoFiltered = True End Function
まあ、ほとんど冗談だと思ってください。
使ってみる
次のコードで実行する。
リスト2 標準モジュール
Public Sub testIsAutoFiltered() Debug.Print isAutoFiltered(Selection.Parent) End Sub
選択範囲のあるシートについて、オートフィルターの状態をイミディエイトに表示するだけのコード。
こんな表を用意してオートフィルターを設定する。
こんなふうに「武松」と「楊志」(またこの2人w)のチェックを外して、[OK]。
絞り込まれた。
範囲を選択して、リスト2を実行!
当然、「True」が返る。
念のため、
絞り込みを解除して実行。
ちゃんと「False」が返った。
おわりに
まあ、Function化するよりも、AutoFilterオブジェクトについてマスターしておくことの方が重要でしょうね。