【VBA】オートフィルタを解除する

エクセルのシート上で、オートフィルタが設定されているかどうかを判断し、オートフィルタを解除する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はとても便利な記述方法で目からウロコでした。その紹介はまたのちほど。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

子育てに奮闘しながらも、再びガッツリ走り込める日を夢見るフルタイム会社員。

コメント

コメントする

CAPTCHA


目次