Excel VBAでオートフィルタを扱ってみる(2)フィルタリング状態を解除する

Excel マクロ、VBA

スポンサーリンク

前回の記事では、Excel VBAでオートフィルタを設定する方法を扱った。
今回は、そのオートフィルタを解除する方法を中心に取り扱う。

Excel VBAでオートフィルタを扱ってみる(1)オートフィルタを表に設定する

オートフィルタのフィルタリングを解除する ShowAllData

下図では、B列にオートフィルタのフィルタリングが掛かっている。

こういったフィルタリングを全て解除し、表のデータを全て表示するソースコードは、ShowAllDataというメソッドを使えば良く、次のようになる。

ただ、このShowAllDataは、あくまでフィルタリングが掛かっている状態でなければ正しく動作しない。

私もこれをよく忘れてしまうのだが、何もフィルタリングが掛かっていない状態でShowAllDataを実行すると「ShowAllDataメソッドは失敗しました」というエラーが出てしまう。

ではこのエラーを防ぐには、これまた場合分けをすることになる。
すなわち、フィルタリングが掛かっている状態なのか、そうでないのかだ。

そのソースコードを示す前に、こういう処理をVBAに組み込む必要性が、実務のどのような場面で考えられるだろうか。

実務からも考えた操作目的

実務では、Excelのオートフィルタ付き表のフォームを配布して、そこに色々と記入してもらうことがよくある。
それに記入する人はしばしば、まず必要なデータの行だけにフィルタリングするものだ。

そしてそのフィルタリングを掛けっぱなしにしたままで、与えられたマクロを実行するものだ。
あるいは、あれこれ操作しているうちに、オートフィルタの設定じたいが解除されてしまうことも考えられる。

だから、

  • オートフィルタが設定されたままであろうと解除されていようと
  • データのフィルタリングがされていようといまいと

「オートフィルタが設定されていて、なおかつデータのフィルタリングは全て解除された状態」に直したいという場面が多いわけだ。

FilterModeも使ったソースコード

では本題に戻って、表にフィルタリングが掛かっている状態なのか、そうでないのかを判定するのには、FilterModeというものを使う。

前回の記事で扱ったのはAutoFilterModeで、今回扱うのはFilterModeだが、

AutoFilterModeとFilterMode
AutoFilterMode→オートフィルタが設定されているのかどうか
FilterMode→オートフィルタ付きの表が、何らかの条件でフィルタリングされているのか

という違いになる。

さてこれらを組み合わせ、前回の記事で扱ったものも総合すると、次のようなソースコードになる。

オートフィルタ関係のVBAは、意外と面倒だ。

スポンサーリンク