いきなり答える備忘録

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

(Excel)COUNTIF(S)関数で複数条件(AND,OR)を指定する方法

 COUNTIF(S)関数を使って値をカウントする際に複数の条件を指定する方法についてです。
 AND条件(かつ)についてはCOUNTIFS関数を使えば問題ありませんが、OR条件(または)の場合にちょっとした工夫が必要になります。

AND条件(かつ)を指定する方法

 AND条件を指定する場合にはCOUNTIFS関数を使います。
 次の画像では、D3セルに式を入力し、B列の数値のうち「100以上」かつ「140以下」のものをカウントしています。「100」「120」「105」「140」の4つの値が該当(わかりやすいようにA列にそのことを表示しています。以下同様)するので、結果は「4」となります。

 D3セル

=COUNTIFS(B3:B9,">=100",B3:B9,"<=140")

 COUNTIFS関数を使うことで、条件範囲と条件の組を複数指定してAND条件のカウントをすることができます。
 同様にして3つ以上の条件を指定することも可能です。



 次の画像は別々の列に条件を課す例です。
 F3セルに式を入力し、所在地が「東京都」で、かつ従業員数が「1000」以上の事業所の数をカウントしています。

 F3セル

=COUNTIFS(C3:C9,"東京都",D3:D9,">=1000")

 画像中で示しているように、所在地が東京都の事業所は4つあり、従業員数が1000以上の事業所は5つあります。
 その両方に該当する事業所は3つですので、正しくカウントできていることがわかります。

OR条件(または)を指定する方法

 上記で見たように複数条件でカウントするための関数としてCOUNTIFS関数がありますが、あくまでAND条件でのカウントをするためのものであり、これを使ったからといってOR条件のカウントができるわけではありません。別の工夫が必要になりますので2つの例を紹介します。

複数の結果を足し算する方法

 次の画像では、D3セルに式を入力し、B列の数値のうち「100未満」または「140より大きい」のものをカウントしています。「70」「85」「150」の3つの値が該当するので、結果は「3」となります。

 D3セル

=COUNTIF(B3:B9,"<100")+COUNTIF(B3:B9,">140")

 COUNTIF(S)関数を使ってそれぞれの条件でカウントし、結果を足してしまうという単純なやり方です。
 わかりやすいのですが、両方の条件に該当する値があると2回ずつカウントされてしまうという点に注意する必要があります。



 その具体的な例が次の画像です。
 所在地が「東京都」か、または従業員数が「1000」以上の事業所の数をカウントしようとして、F3セルに「=COUNTIF(C3:C9,"東京都")+COUNTIF(D3:D9,">=1000")」と入力しましたが結果は「9」となりました。事業所は全部で7つなので、これは明らかに誤りです。

 所在地が「東京都」の事業所が4つ、従業員数が「1000」以上の事業所が5つあるという結果を単純に足してしまったため、両方の条件に該当する事業所が2回ずつカウントされてしまった、というのが誤りの原因です。



 そこで式を次のようにすることで二重にカウントする問題を回避しました。
 正しい結果「6」が得られているのがわかります。

 F3セル

=COUNTIF(C3:C9,"東京都")+COUNTIF(D3:D9,">=1000")-COUNTIFS(C3:C9,"東京都",D3:D9,">=1000")

 それぞれの条件に該当する事業所をカウントして足しています(ここまでは1つ上の例と同じで4+5=9となります)。さらにCOUNTIFS関数を使い両方の条件に該当する事業所数を求め(結果は3になります)、その値を差し引いています。
 これにより、いったん二重にカウントされた事業所の数が差し引かれて1回ずつのカウントとなり、正しい結果が得られます。
 ただし式が長くなり、条件が3つ以上の場合に応用しようとするととても難解なものになってしまうという問題があります。

SUM/IF関数で代用する方法

 COUNTIF(S)関数ではなく別の関数で対応する方法です。
 代用案ではありますが、二重カウントの問題を回避できるというメリットがあります。
 次の画像では上記の例と同様に、所在地が「東京都」か、または従業員数が「1000」以上の事業所の数をカウントしています。

 F3セル

=SUM(IF((C3:C9="東京都")+(D3:D9>=1000),1,0))

「(C3:C9="東京都")+(D3:D9>=1000)」の部分により、それぞれの行が2つの条件のうちいくつに該当するかを求めています。2つの条件に該当する行は「2」に、1つの条件に該当する行は「1」に、どちらにも該当しない行は「0」に変換されます。さらにこれをIF関数で囲んで「IF(~,1,0)」とすることで、1以上の値は1に変換され、0はそのままとなります(実質的には2が1に変換されるだけ)。
 以上により、1つ以上の条件を満たす行が「1」という数値に変換されることになるので、あとはその数を合計すれば、いずれかの条件に該当する事業所の数が求められるというわけです。
 複数の条件に該当する行であっても最初から「1」としてカウントされるので二重カウント分を差し引く必要がなく、条件が3つ以上に増えても条件を増やす(+で連結する)だけで済むため簡潔に求めることができるのが大きなメリットです。



 なお「IF((C3:C9="東京都")+(D3:D9>=1000),1,0)」の部分だけ実行すると次のようになります。
 上記の説明のとおり、条件に1つでも該当する行が「1」に、そうでない行が「0」に変換されていることがわかります。

 


 ちなみにSUM関数の代わりにSUMPRODUCT関数を使っても同じ結果になります。