Excel VBAでオートフィルターの表示をクリア(全件表示)する。フィルター解除ではない。

オートフィルターの表示をクリア

Excelのフィルター機能で、クリアというボタンがあります。
これを押下すると、フィルターに設定した条件をすべてリセットして、非表示になっていた行が見えるようになります。でも、フィルターが解除されるわけではありません。

そんなことをしたくてインターネットで調べたのですが、調べ方が悪いのか、いい説明ページが見つからず、苦労したので備忘録です。

Excel 2007、2010、2013、2016で動作を確認しました。

やりたいこと

フィルターをクリアしたいのです。解除ではないのですよ。

背景

お仕事で使っているExcelの表にはフィルターが設定されていて、複数条件で絞り込んで見ています。
この表を定期的に更新したいのです。
元データは別のところにあり、全件をプレーンテキストで貼り付けます。

要は洗い替えなので、非表示行があると古いデータがシートに残ってしまい、おかしなことになってしまいます。
なので、いったん全件表示状態にして、データを洗い替え、その後フィルターの条件を設定するという流れです。

フィルター設定の方法は見つけられた(たとえばこんなの)ので、その前段階も自動化したいのです。

実現方法

調べていても、オートフィルターを解除する方法しか見つけられず。。
「クリア」というキーワードを入れているのに。。

解除でも結果は同じになるかもしれませんが、カッコよくない!
それに、場合によっては解除してしまうと再設定が必要など、さらに面倒なことにもなるのです。なので、正当な方法で実現したかったのです。

ShowAllDataメソッドを使う

やっと見つけたメソッド。ShowAllData
さっそくシートオブジェクトでメソッドをテスト実行して成功!

知っているか知らないかのことなのですが、知らない者にとっては探すのが大変でした。。

本当にたまたま見つけたと記憶しています。言われてみれば確かに、以前、別の仕事場で書いたことがあるような気がします。

ちょっとした落とし穴(というか注意点)

ShowAllDataメソッドは、非表示セルがないとエラーになります。
実際、エラーになって困りました。。
MSDNを読むと、なんとなくそんな風にも読めるのですが、分かりにくいです。。

ShowAllDataを実行する前に、フィルターがかかっているか確認すればよいということです。

フィルターされているかどうかは、FilterModeプロパティで分かります。Trueなら、非表示行があるということです。

書いたコード

ということで、Boolean型のプロパティ値を使って、条件判定します。シートに対して他にもいろいろやることがあるので、Withで書きました。

With ActiveSheet
    If .FilterMode Then .ShowAllData
End With

めでたしめでたし。

コメント

タイトルとURLをコピーしました