いきなり答える備忘録

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

(Excel)複数条件(OR条件)でカウントする方法

 Excelで、値そのものにOR条件(または)をつけてカウントする(つまり、いずれかの条件を満たす値の数を数える)例や、複数の列にOR条件をつけて件数(行数)をカウントする例です。どちらの方法でも、両方の条件に該当する値の数を差し引く手間が必要がなく、3つ以上の条件も簡単に設定できます

  • SUM関数とIF関数を組み合わせて、OR条件つきのカウントをすることができます。
  • FILTER関数とROWSを組み合わせる方法もあります。ただしカウントするのは基本的に「行数」に限られます。

SUM関数とIF関数を組み合わせる方法

 次の画像では、B3:D5セルの値のうち、10以上であるか、または偶数であるものをカウントしています。
 両方の条件を満たす値(10と16)が存在するのでそれぞれの条件でカウントした結果を足すと誤ってしまうのが注意点ですが、正しい結果(6,15,10,8,6,16の個数「6」)が得られています。

 F3セル

=SUM(IF((B3:D5>=10)+ISEVEN(B3:D5*1)>0,1,0))

 IF関数と「+」の演算子を使うことによりいずれかの条件を満たす値を「1」に変換し、SUM関数で合計しています。これでいずれかの条件を満たす値をカウントできます。
 カウントなのでCOUNTIF(S)を使いたくなりますが、関数内にOR条件を組み込めないのでOR条件を設定するという意味では全く役に立ちません。別々にカウントして足し算したり、さらには両方の条件を満たす値の数を引き算するといった作業が必要になります。特に条件が3つ4つに増えると計算が困難になります。
 それならIF関数を使えば「+」演算子を使ってOR条件を設定できますし、関数(ここではISEVEN)を使った条件設定もできるため非常に有利です。条件が増えてもIF関数内に条件式を加えて「+」でつなぐだけで済みます。
 なおISEVEN関数の引数内に「*1」と記しているのは、複数のセルを直接指定するとエラーになるという謎仕様を回避するためです。



 次の画像は上の式からSUM関数だけを外したときの結果です。
 両方の条件を満たす値に対しても「1」と出力されている(つまり二重にカウントされない)のがわかります。



 次の画像はより実務的な例です。左側の表に記載された事業者のうち所在地(C列)が「東京都」であるものか設立年(D列)が「1980以降(以上)」であるものをカウントしています。

 F3セル

=SUM(IF((C3:C11="東京都")+(D3:D11>=1980)>0,1,0))

 この例の場合は複数の列に条件を課していずれかの条件に該当する行数をカウントする、という点が最初の例とは異なります。
 しかし式は最初の例とほぼ同様で、条件ごとに参照する範囲が異なるだけです。IF関数により9つあるそれぞれの行について「1」(いずれかの条件を満たす)または「0」(いずれも満たさない)と判定し、SUM関数で合計することによりカウントが成功します。

FILTER関数とROWS関数を組み合わせる方法

 FILTER関数を使う少し変わった方法です。
 最初の例のように複数行複数列の値をカウントするのには向いていません(他の関数を併用すれば可能ですが上記のやり方の方が簡単です)。しかし2番目の例のように件数(行数)をカウントする場合ならこちらの方が扱いやすいかもしれません。
 次の画像では2番目の例と同じく、C列の所在地が「東京都」か、またはD列の設立年が「1980以降(以上)」である事業所をカウントしています。

 F3セル

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

 FILTER関数で表から条件を満たす行を抽出し、ROWS関数で行数をカウントしています。
 FILTER関数でOR条件の抽出をするときに条件を「+」でつなぐというのが定番なので、ご存じの方はこちらのやり方の方がなじみやすいかと思います。
 行ごとの判定結果を1や0に変換する手間が必要がないのもポイントです。