‥‥

コメントは承認制です。

フィルタで絞込中かを判断させるエクセル関数

2016年11月23日 | ExcelなどのPC...

サンプル画像のような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




音楽(クラシック) ブログランキングへ


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。