いきなり答える備忘録

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

(Gスプレッドシート)OR条件でカウントする方法

 Googleスプレッドシートで、値そのものにOR条件(または)をつけてカウントする方法、さらに複数の列にOR条件をつけて件数(行数)をカウントする方法についてです。

  • COUNTIF関数1つでOR条件つきのカウントをすることができます。
  • FILTER関数とROWS関数を組み合わせる方法もあります。

COUNTIF関数を使う方法

 次の画像では、B3:D4の範囲に並んでいる数値のうち10以上または5以下のものだけをカウントしています。
 該当する数値は17,10,4,3の3つで結果は「4」となります。

 F3セル

=COUNTIF(ARRAYFORMULA((B3:D4>=10)+(B3:D4<=5)),">0")

 実はCOUNTIF関数の第1引数(範囲)にて関数式が使えますので、実質的にこの引数内に条件を記すことができます(ただしExcelではできません)。ここでは2つの条件をカッコで囲んで「+」でつなぐ(さらにARRAYFORMULAで囲む必要があり長くなります)ことによりOR条件としています。どちらかの条件にあてはまることで式全体の結果は「1」となり、どちらにもあてはまらないと「0」となります。よってこの例の場合の第2引数は「1」としてもいいですが、条件の内容によっては2以上になる場合もあるので「">0"」として統一しています。



 このやり方の1つのメリットは条件が排他的でない(両方を満たすケースがある)場合でも同じような式で対応できることです。
 次の画像では数値のうち10以上または偶数のものをカウントしています。該当するのは17,10,6,4ですので結果は「4」となります。

 F3セル

=COUNTIF(ARRAYFORMULA((B3:D4>=10)+ISEVEN(B3:D4)),">0")

 ほかのやり方としては2つのCOUNTIFでそれぞれの条件に該当するものをカウントして足し、さらにCOUNTIFで両方に該当するものをカウントして差し引く(二重にカウントしている分を差し引くため)という方法が考えられます。しかしこのやり方ならそのような手間は一切要りません。



 次の例は「複数の列に対しそれぞれ条件を課し、いずれかに該当する件数(行数)をカウントする」というケースです。
 具体的にはC列の所在地の値が「東京都」か、またはD列の設立年の値が「1980以降(以上)」である事業所の数をカウントしています。

 F3セル

=COUNTIF(ARRAYFORMULA((C3:C11="東京都")+(D3:D11>=1980)),">0")

 これも条件を課している列がそれぞれ異なるだけで、式の内容的には同じです。

FILTER/ROWS関数を使う方法

 こちらはFILTER関数を用いる方法です。複数行複数列の値をカウントする場合はちょっと手間が要ります(上記のCOUNTIFのやり方の方が簡単なので省略します)が、件数(行数)のカウントならこちらの方が簡単です。
 次の画像では1つ上の例と同じく、C列の所在地の値が「東京都」か、またはD列の設立年の値が「1980以降(以上)」である事業所をカウントしています。

 F3セル

=ROWS(FILTER(B3:D11,(C3:C11="東京都")+(D3:D11>=1980)))

 FILTER関数で該当するデータを抽出してROWS関数で行数をカウントするという方法です。FILTER関数にOR条件をつける場合に「+」演算子を用いるという方法が有名ですので、こちらの方がわかりやすいかもしれません。
 さらにFILTER関数の場合ARRAYORMULAも要らず「">0"」も不要なので(式の結果が0以外なら抽出されるため)式が短くまとまります。
 FILTER関数の第1引数に3列とも指定する必要はなく「B3:B11」などでも構いません。



 次の画像では条件を1つ増やし、C列の所在地の値が「東京都」かまたは「千葉県」、またはD列の設立年の値が「1980以降(以上)」である事業所をカウントしています。

 F3セル

=ROWS(FILTER(B3:D11,(C3:C11="東京都")+(C3:C11="千葉県")+(D3:D11>=1980)))

 条件が増えても単純に記して「+」演算子でつなぐだけです。重複カウント分の差し引きといった面倒は一切ありません。
 もちろんこれはCOUNTIF関数についても同じですが、FILTER関数の方が式がやや簡潔なぶん条件が増えても扱いやすいです。