いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)COUNTIF関数で複数条件(AND,OR)を指定する

 GoogleスプレッドシートのCOUNTIF関数でAND/OR条件(かつ/または)をつけてカウントする方法です。
 実は1つのCOUNTIF関数でカウントできますのでその方法を紹介します。

  • COUNTIF関数の第1引数で関数式が使えるので論理演算ができ、これを利用してAND/OR検索ができます。
  • AND条件はCOUNTIFSの方が簡単ですが、特に複数列のOR条件についてはこの方法が便利です

単純な(該当するセルをカウントする)ケース

AND条件の例

 B列に数値が並んでいます。
 そこでD3セルに式を入力して200以上かつ300以下のものをカウントしています。

 D3セル

=COUNTIF(ARRAYFORMULA((B3:B10>=200)*(B3:B10<=300)),">0")

 第1引数内に2つの条件を記し、「*」によりAND条件としています。
 FILTER関数みたいに「(B3:B10>=200)*(B3:B10<=300)」だけで済めばよいのですがARRAYFORMULAが欠かせません。ここがちょっと気づきにくいところで、式も長くなってしまうのが残念です。
 当然COUNTIFSの方が簡単ですが、1つのCOUNTIFで複数条件を指定できているところがポイントです。
 なお、第2引数(条件)は「1」でもよいですがOR条件では2以上の値になることもあるので、条件を統一するため「">0"」としています。

OR条件の例

 ここではD3セルに式を入力して200より小さいか、または300より大きいものをカウントしています。

 D3セル

=COUNTIF(ARRAYFORMULA((B3:B10<200)+(B3:B10>300)),">0")

 「+」演算子を使えばOR条件にすることができます。
 これもこのような単純なケースならCOUNTIFを2つ使って足し算する方が簡単ですが、参考まで。

複数列に条件をつける(該当する行数をカウントする)ケース

AND条件の例

 ここではC,D列の値にそれぞれ条件をつけて、出身地が「東京都」で、かつ身長が170以上のものをカウントしています。

 F3セル

=COUNTIF(ARRAYFORMULA((C3:C10="東京都")*(D3:D10>=170)),">0")

 2つの条件に該当する2名(照井と斎藤)をカウントできているのがわかります。
 COUNTIF関数は基本的に条件に該当するセルをカウントしますが、「*」演算子によるAND条件を課すことで結果的に複数条件に該当する行をカウントできる(COUNTIFS関数と同様)ところがポイントです。

OR条件の例

 実用的に最も重要と思われる例です。
 ここでは出身地が「神奈川県」または身長が170未満のものをカウントしています。神奈川県出身者は3名、身長170未満も3名いますが、両方に該当する者が1名いますので結果は「5」(佐藤,勝又,藤井,松方,渡辺が該当)となります。

 F3セル

=COUNTIF(ARRAYFORMULA((C3:C10="神奈川県")+(D3:D10<170)),">0")

 複数列のOR条件は(通常は条件が排他的でないため)厄介になりやすく、まともにやるとCOUNTIFを複数使ってCOUNTIFSで重複分を引き算するといった面倒なやり方になります。
 しかしこの方法なら論理的に明快で、対象が3列以上になっても項を増やすだけで済みます。

備考

  • 例は省略しましたがAND条件とOR条件の複合も可能です。同じようなSUMIF関数の記事では紹介していますので参考まで。
  • FILTER関数に慣れている方なら気づくと思いますが、ROWS/FILTER関数で全く同じことができます。
    例として最後のケースは「=ROWS(FILTER(B3:D10,(C3:C10="東京都")+(D3:D10<170)))」でカウントできますので好みで選んでください。