オートフィルターの表示をクリア
Excelのフィルター機能で、クリアというボタンがあります。
これを押下すると、フィルターに設定した条件をすべてリセットして、非表示になっていた行が見えるようになります。でも、フィルターが解除されるわけではありません。
そんなことをしたくてインターネットで調べたのですが、調べ方が悪いのか、いい説明ページが見つからず、苦労したので備忘録です。
Excel 2007、2010、2013、2016で動作を確認しました。
やりたいこと
フィルターをクリアしたいのです。解除ではないのですよ。
背景
お仕事で使っているExcelの表にはフィルターが設定されていて、複数条件で絞り込んで見ています。
この表を定期的に更新したいのです。
元データは別のところにあり、全件をプレーンテキストで貼り付けます。
要は洗い替えなので、非表示行があると古いデータがシートに残ってしまい、おかしなことになってしまいます。
なので、いったん全件表示状態にして、データを洗い替え、その後フィルターの条件を設定するという流れです。
フィルター設定の方法は見つけられた(たとえばこんなの)ので、その前段階も自動化したいのです。
実現方法
調べていても、オートフィルターを解除する方法しか見つけられず。。
「クリア」というキーワードを入れているのに。。
解除でも結果は同じになるかもしれませんが、カッコよくない!
それに、場合によっては解除してしまうと再設定が必要など、さらに面倒なことにもなるのです。なので、正当な方法で実現したかったのです。
ShowAllDataメソッドを使う
やっと見つけたメソッド。ShowAllData。
さっそくシートオブジェクトでメソッドをテスト実行して成功!
知っているか知らないかのことなのですが、知らない者にとっては探すのが大変でした。。
本当にたまたま見つけたと記憶しています。言われてみれば確かに、以前、別の仕事場で書いたことがあるような気がします。
ちょっとした落とし穴(というか注意点)
ShowAllDataメソッドは、非表示セルがないとエラーになります。
実際、エラーになって困りました。。
MSDNを読むと、なんとなくそんな風にも読めるのですが、分かりにくいです。。
ShowAllDataを実行する前に、フィルターがかかっているか確認すればよいということです。
フィルターされているかどうかは、FilterModeプロパティで分かります。Trueなら、非表示行があるということです。
書いたコード
ということで、Boolean型のプロパティ値を使って、条件判定します。シートに対して他にもいろいろやることがあるので、Withで書きました。
With ActiveSheet If .FilterMode Then .ShowAllData End With
めでたしめでたし。
コメント