エクセルのシート上で、オートフィルタが設定されているかどうかを判断し、オートフィルタを解除するVBAを紹介します。

VBAを記述する上で、オートフィルタは「解除」も「設定」も同じVBAで記述します。
そのため、任意の行にオートフィルタを設定する場合、作業シートの状態によってはマクロがうまく機能しない現象に陥ります。



どういうことですか?



具体的に言うと
オートフィルタが設定されているシートに、さらにオートフィルタの設定をしようとする時です。



なにか問題がありますか?



「オートフィルタの設定」×「オートフィルタの設定」=「解除」という計算式が成り立ってしまいます。



オートフィルタが消えてしまうんですね。


オートフィルタについて、マクロを実行しようとする時のシートの状態はその時々違います。シートにオートフィルタが設定されていても、されていなくても、同じ結果が得られるようにしましょう。
オートフィルタを設定するVBAの前に、次のように記述すると問題が回避できます。
Sub AutoFilterOff()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
End Sub
「もしもオートフィルタが設定されていたら解除する」という内容です。


同じファイル内でオートフィルタ解除をたくさん使用する場合は、別にオートフィルタ解除のVBAを記述しておいて、VBA実行中に呼び出すとすっきりとした画面になります。
Sub オートフィルタを解除する()
Call AutoFilterOff
End Sub
Callはとても便利な記述方法で目からウロコでした。その紹介はまたのちほど。
コメント