- ベストアンサー
(VBA)フィルタがかかっているかどうかの判断方法
フィルタがかかっているかどうかを取得したいのですが フィルタがかかっているシートにて Sub test1() If ActiveSheet.FilterMode Then MsgBox "フィルタがかかってます" End If End Sub Sub test1の1() If ActiveSheet.FilterMode = True Then MsgBox "フィルタがかかってます" End If End Sub を実行しても"フィルタがかかってます"は表示されません。 Sub test2() If Rows(1).FilterMode Then MsgBox "フィルタがかかってます" End If End Sub Sub test3() If ActiveSheet.Rows(1).FilterMode Then MsgBox "フィルタがかかってます" End If End Sub こちらは オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) になってしまいます。 フィルタがかかっているか調べる方法はありますか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すでにWendy02さんから回答がでていますが、付け加えますと シートにオートフィルタが設置されていれば、そのオートフィルタの状態の如何にかかわらずAutoFilterModeでTrueが返ります。 これに対し、設置されたオートフィルタが、何らかのフィルタ指示をされてフィルタがかかった状態であればFilterModeでTrueが返ります。(フィルタが設置されていても何もフィルタ指示をされていない状態は、通常フィルタがかかっているとは言いません。)
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
似た表現のものに、AutoFilterモードとFilterモードの2つが有るようです。 どちらもObjectはシートObjectに対してです。 その違いは、 Sub test01() ActiveSheet.Range("A:A").AutoFilter 'これでA列に▼がつく '下記で▼が消える ActiveSheet.Range("A:A").AutoFilter 'X ActiveSheet.AutoFilterMode = False 'range指定なし MsgBox ActiveSheet.AutoFilterMode ActiveSheet.Range("A:A").AutoFilter MsgBox ActiveSheet.AutoFilterMode End Sub Xの行をコメントアウトをしたり生かしたりして、情況を理解してください。 ▼を表示している(する)モードの設定と状態取得をします。 ーー FilterModeは http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_autofilter.html の >FilterModeプロパティではAutoFilterがONでもデータが抽出されていないどきはFalseのままですので、AutoFilterModeプロパティを利用します。 を参照のこと。 データが 商品▼ a s a s d f a で書き事項すると、False Sub test02() MsgBox ActiveSheet.FilterMode End Sub フィルタして 商品▼ a a a の状態にして、実行するとTrueです。 「すべて」を選ぶと上記実行はFalse 以上を参考に考えてみてください。
お礼
ありがとうございます。参考になりました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 回答自体は、たぶん、以下のようなことなんでしょう。 でも、ふと思ったけれども、これは、私たち、英語を母国語としない者にとって、損ですね。 "Filter" というのは、日本語でいうと、「ふるいにかけた」ということで、「すべて」出ているときは、"Filter" とは言わないからです。 Sub test1a() If ActiveSheet.AutoFilterMode Then MsgBox "フィルタがかかってます" End If End Sub
お礼
「Auto」が必要なのですね! 私の求めていた回答です! ありがとうございます。
お礼
本当だ。 やってみたらおっしゃるとおりになりました。