Excelの複数条件はSUMPRODUCTが分かりやすい

Excel で複数条件を満たすデータの件数を取得したいけど、いちいちフィルターをかけて数えるのも手間がかかる…… そんなときに使える代表的な関数には次のようなものがあります。

  • DCOUNT関数

  • COUNTIFS関数(Excel 2007 以降)

  • SUMPRODUCT関数

状況によりけりですが、私はSUMPRODUCT関数を使うことが多いです。
例えば、A列に年齢、B列に性別、C列に血液型が入力されているとしましょう(データは 1 件が 1 行に入力されているとします)。その表から「30歳以上・男性・A型」に当てはまるデータの件数を求めたいなら次のような数式を入力します(入力するのはA〜C列以外にしてください。でないと循環参照エラーが出てしまいます)。

=SUMPRODUCT(($A:$A>=30)*($B:$B="男")*($C:$C="A"))

SUMPRODUCT関数で複数条件を扱うメリットは、ひとつひとつの条件がわかりやすいことにあります。「$A:$A>=30」が「A列が30歳以上」という指定で、「$B:$B="男"」が「B列が男性」という指定で、「$C:$C="A"」が「C列がA型」という指定です。数式を見てそのままパッと理解できます。あいだの「*」は、これらの条件をすべて AND(かつ)で結ぶという意味です。

複数条件で OR(または)を使いたくなる瞬間もありますが、個人的には、ミスのもとなので、やめています。代わりにすべて AND(かつ)で結んだものを後で合計するようにしています。例えば、さきほどの例で「30歳以上・男性・A型またはB型」に当てはまるデータの件数を求めたい場合には次のような感じです(それぞれの行の数式はもちろん別のセルに入れます。A〜C列に入れられないのは上記と同じです)。

=SUMPRODUCT(($A:$A>=30)*($B:$B="男")*($C:$C="A"))
=SUMPRODUCT(($A:$A>=30)*($B:$B="男")*($C:$C="B"))

1 行目がさっきと同じく「30歳以上・男性・A型」の件数を求めるもの、2 行目が「30歳以上・男性・B型」の件数を求めるものです。それぞれで求めておいて、足せばよいと思います。慣れてくれば OR(または)で結ぶための「+」も使えるようになるでしょうが、それでも重複を取り除くという面倒な作業(AまたはBの件数=Aの件数+Bの件数−AかつBの件数)が出てくる可能性もあります(血液型がA型かつB型のひとは存在しないでしょうから、そういう場合には重複を取り除く必要はないのですが、重複があるかないかを気にかけておく必要はあります)。

ちなみに、同じこと(「30歳以上・男性・A型」の件数を求める)をCOUNTIFS関数を使ってやると次のようになります。

=COUNTIFS($A:$A,">30",$B:$B,"男性",$C:$C,"A")

「>=30」のところは一見すると「" "」で囲む必要はない(というかむしろ囲むとエラーになる)ように思われますが、COUNTIFS関数内で演算子を使用するときには「" "」で囲ってあげる必要があります。面倒なので、文字列だろうと数式だろうと、COUNTIFS関数内で条件として利用するときには「" "」で囲むものだと覚えておくとよいと思います。COUNTIFS関数もかなりすっきりとした見た目なのですが、複数条件がずらずらと長くなってくると、「検索範囲」と「条件」の対応がよく分からなくなってきてしまいます。「検索範囲」と「条件」のペアがひとつずつ「( )」で囲まれているSUMPRODUCT関数の方がオススメな理由はこれにつきます。

この記事が気に入ったらサポートをしてみませんか?