オートフィルタで絞り込まれているか判定する


ある列が、オートフィルタで絞り込まれているかどうかを判定するにはどうしたらいいでしょう。それも、マクロを使わないで。これは、意外と簡単です。たとえば、下図のようなリストで考えてみましょう。

いま、A列に何個のデータが入力されているかは、COUNTA関数でわかります。

このCOUNTA関数はデータの個数を返します。そのデータが、オートフィルタによって絞り込まれているかどうかは関係ありません。

データの個数をカウントできるのはCOUNTA関数だけではありません。[データ]-[集計]を実行したとき自動的に挿入されるSUBTOTAL関数も、最初の引数に「3」を指定することで、COUNTA関数と同じようにデータの個数をカウントできます。

さらに、このSUBTOTAL関数は、オートフィルタで見えているセルだけを計算の対象にするという特徴があります。SUBTOTAL関数のこうした特徴と、ケースによっては誤計算するバグに関しては「オートフィルタで絞り込んだ件数を表示する」をご覧ください。

A列を「東京」で絞り込むと、SUBTOTAL関数の結果も変化します。

したがって、COUNTA関数の結果と、SUBTOTAL関数の結果が異なっていたら、その列はオートフィルタで絞り込まれているとわかります。

上図のセルC8には、次のような計算式を入力してあります。

=IF(COUNTA(A:A)<>SUBTOTAL(3,A:A),"オートフィルタ","")