サンプル画像のような10行にも満たないな小さなものならば、フィルタを使用しているどうかは、一目瞭然ですが、縦横に何百、何千もの行や列となる大きなデータベースでは、横にスクロールさせてフィルタの有無を確認するのは大変です。
A列にデーターが詰まっていると仮定して、A列以外の列には下記のような関数式を
=IF(COUNTA(A:A)<>SUBTOTAL(3,A:A),"フィルタ中","フィルタ解除中")
上の式をA列にデータのないA1セルなどに貼ると循環関数となってしまうので、A列に貼る場合は、データーが入っている(または入る可能性のあるA5セルからA1004セルまで等を状況把握して
=IF(COUNTA($A$5:$A$1004)<>SUBTOTAL(3,$A$5:$A$1004),"フィルタ中","フィルタ解除中")
という関数式を入れることで、フィルタの使用時と、未使用時(解除中)の判断をさせることが出来ます。
COUNTA またはCOUNTIFやCOUNTIFSなど) の関数は範囲内に、いくつのデーターが存在するのかを数える関数です。
SUBTOTAL という関数はデーター数がいくつ存在するかではなく、絞り込まれた結果、今、いくつのデーターが存在するのかを数える関数です。
フィルタの未使用時の絞り込みをされていない状況下では、COUNTA関数で計算された数とSUBTOTAL関数で計算された数が同じ(イコール)になり、フィルタが使用されて絞り込まれた場合には、COUNTA関数で計算された数の方がSUBTOTAL関数で計算された数より大きな数となり、イコールにはなりません。
この2つのケースを IF関数 でケース別に条件分することで、フィルタの使用の有無を判断出来ます。
マクロなどで最終行を判別させる時などで、フィルタが使用されている場合に、意図しない結果を招いてしまうケースがあり、そのようなエラーを回避するために
=IF(COUNTA($A$5:$A$1004)<>SUBTOTAL(3,$A$5:$A$1004),1,2)
などの計算式を埋め込み、そのセルの計算値が 1 だった場合には、マクロが作動しないような設定で、便利に使うことも可能です。
シリーズ
「エクセルの便利メモ」 Excelを極めるにはVLOOKUP関数を使ってはいけない
の他の記事(目次)は下記のURLとなります。
http://blog.goo.ne.jp/pizzica0912/e/2d6c432428b6d6f4708f239c9af2ffd5
音楽(クラシック) ブログランキングへ