フィルタで抽出した結果の中からCOUNTIFを使いたい(SUBTOTALではできない)

フィルタで抽出した結果を計算するときにSUBTOTALを使うと思います。

しかしSUBTOTAL内で指定できる集計方法11種類の中にはCOUNTIFがありません。

例えば担当者「A」で抽出した結果の中から特定の商品を指定してカウントしたい、ということがあると思います。

値を出したいものがひとつだけならば、さらに商品の列でフィルタをかければ良いことですが、担当者「A」で絞り込んだときに同時に複数の商品をカウントしたい、という場合には、いちいち商品ごとにフィルタをかけ直すのは面倒ですね。

こういった時に便利な関数です。

下図のように各担当者ごとに商品があります。

20160316a_1


COUNTIFで計算すると「みかん6個」「りんご3個」「桃4個」・・・となります。

フィルタで担当者「a」を抽出したとしても、SUBTOTALと違うので、値の結果は変化しません。

これでは計算できませんので、関数を工夫します。



以下の関数を使います。

=SUMPRODUCT((SUBTOTAL(103,INDIRECT("B"&ROW($B$11:$B$30))))*($B$11:$B$30="みかん"))

これでフィルタで抽出した結果の中からだけ「みかん」の数を数えることができます。

「みかん」の部分はセルを指定してもできます。

結果は下図の通りとなります。

20160316a_2

それぞれ「みかん2」「リンゴ1」「桃 1」と計算されました。

・SUBTOTAL(103~の部分はフィルタでCOUNTAを使うことを指定しています。

・INDIRECT("B"&ROW($B$11:$B$30)~は数えたい対象列のアルファベット「B」をINDIRECTで指定し、ROWのところは実際の対象データの範囲を選択します。これで可変となり、フィルタで抽出してもその都度ROWで行番号を拾ってきて、INDIRECTで「B〇:B〇」(〇は行番号)と範囲選択できることになります。

・*($B$11:$B$30="みかん")~は対象列から検索する対象物を指定しています。例として分かりやすく「"みかん"」と入力していますが、上図の場合「*($B$11:$B$30=B2)」と指定してもOKです。(セルを指定する場合はダブルクォーテーションで挟む必要はありません)

以上です。