フィルタで抽出した結果を計算するときにSUBTOTALを使うと思います。
しかしSUBTOTAL内で指定できる集計方法11種類の中にはCOUNTIFがありません。
例えば担当者「A」で抽出した結果の中から特定の商品を指定してカウントしたい、ということがあると思います。
値を出したいものがひとつだけならば、さらに商品の列でフィルタをかければ良いことですが、担当者「A」で絞り込んだときに同時に複数の商品をカウントしたい、という場合には、いちいち商品ごとにフィルタをかけ直すのは面倒ですね。
こういった時に便利な関数です。
下図のように各担当者ごとに商品があります。
COUNTIFで計算すると「みかん6個」「りんご3個」「桃4個」・・・となります。
フィルタで担当者「a」を抽出したとしても、SUBTOTALと違うので、値の結果は変化しません。
これでは計算できませんので、関数を工夫します。
以下の関数を使います。
=SUMPRODUCT((SUBTOTAL(103,INDIRECT("B"&ROW($B$11:$B$30))))*($B$11:$B$30="みかん"))
これでフィルタで抽出した結果の中からだけ「みかん」の数を数えることができます。
「みかん」の部分はセルを指定してもできます。
結果は下図の通りとなります。
それぞれ「みかん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です。(セルを指定する場合はダブルクォーテーションで挟む必要はありません)
以上です。