いきなり答える備忘録

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

(Gスプレッドシート)COUNTIF関数の使い方

 Googleスプレッドシートで、条件を満たす値の数をカウントするCOUNTIF関数の使い方についてです。

  • 「=COUNTIF(範囲, 条件)」という式で、条件を満たすセルの数をカウントできます。
  • 大・小文字、全角・半角、ひらがな・カタカナを区別せずカウントすることに注意が必要です。
  • 条件の記し方を誤った場合にもエラーにならず単に「0」になる点にも注意が必要です。

機能と構文

 COUNTIF関数の機能は「指定した範囲内に、指定した条件に合致する値がいくつあるかカウントする」というものです。
 構文は次のとおりで2つの引数はともに必須です。

COUNTIF(範囲, 条件)

 第1引数は「範囲」としていますが、実は関数が使えます。よって一例としてCOUNTIF関数だけでAND/OR条件によるカウントも可能です(下記でOR条件の例を紹介しています)。

基本的な使用例

文字列をカウントする

 次の画像ではG3セルにCOUNTIF関数を使った式を入力し、E3:E9の範囲(出身地)のうち値が「東京都」であるものをカウントしています。

 G3セル

=COUNTIF(E3:E9,"東京都")

 文字列を条件とする場合は、文字列を「" "」(ダブルクォーテーション)で囲めばOKです。

数値をカウントする

 次の画像ではC3:C9の数値(身長)のうち170であるものをカウントしています。

 G3セル

=COUNTIF(C3:C9,170)

 数値を条件にする場合は「" "」で囲む必要はありません。



 次の画像ではC3:C9の数値のうち170以上であるものをカウントしています。

 G3セル

=COUNTIF(C3:C9,">=170")

 値の大小比較を行う場合は比較演算子(ここでは「>=」)を使い、さらに「" "」で囲む必要があります。
 比較演算子には次のようなものがあり、比較の内容に応じて使い分けます(Aは比較対象となる値)。

比較演算子
意味
=AAと等しい
<>AAと異なる
>=AA以上
>AAより大きい
<=AA以下
<AAより小さい

日付をカウントする

 画像ではD3:D9の範囲(生年月日)のうち値が「2002/1/16」であるものをカウントしています。

 G3セル

=COUNTIF(D3:D9,"2002/1/16")

 条件(第2引数)は「2002/1/16」でいいように見えますが、それだと「2002割る1割る16(=125.125)」という数値とみなされるためうまくいきません。文字列と同様に「" "」で囲む必要があります。
 文字列としてカウントしているように見えますが「2002-1-16」のように書式の異なる日付もカウントできます


 次の画像では同様に「2002/10/1」以降であるものをカウントしています。

 G3セル

=COUNTIF(D3:D9,">=2002/10/1")

 比較の場合は数値と同様に比較演算子を付けて全体を「" "」で囲みます。

条件値をセル参照する場合

 最初の例と同様に、E3:E9の範囲にある「東京都」の数をカウントしていますが、ここでは条件とする文字列をG3セルに置いてそれを参照しています。

 H3セル

=COUNTIF(E3:E9,G3)

 この場合は第2引数(条件)にセル番地を記せばよく、「" "」で囲む必要はありません。
 数値や日付を条件とする場合も同様です。



 次の例では生年月日がG3セルのの日付以降であるものをカウントしています。

 H3セル

=COUNTIF(D3:D9,">="&G3)

 セルに入力されている値と比較する場合、比較演算子を「" "」で囲み、セル番地はその外に置いて「&」でつなぎます。

空白セルをカウントする

 ここでは空白セル(未入力のセル)をカウントしています。

 D3セル

=COUNTIF(B3:B7,"=")

 条件を「"="」とすれば空白セルをカウントできます。COUNTBLANK関数だと空文字列も一緒に数えてしまうのでこのやり方の方が適当です。

空白セルと空文字列をカウントする

 空白セルと空文字列をカウントする例です。

 D3セル

=COUNTIF(B3:B7,"")

あいまい検索(ワイルドカードの使用)

部分一致(~を含む)

 COUNTIF関数ではワイルドカードを使うことができるので、文字列のあいまい検索を行うことがことができます。
 ここではB3:B9の範囲(氏名)のうち「山」の字を含んでいるものをカウントしています。

 G3セル

=COUNTIF(B3:B9,"*山*")

 文字列の前後に「*」を付ければ部分一致検索になります。
 「*」は0文字以上の文字列を意味するワイルドカードです。

前方一致(~で始まる)

 ここでは氏名のうち「山」で始まるものをカウントしています。

 G3セル

=COUNTIF(B3:B9,"山*")

 文字列の後ろに「*」を付ければ前方一致検索になります。

後方一致(~で終わる)

 ここでは出身地のうち「県」で終わるものをカウントしています。

 G3セル

=COUNTIF(E3:E9,"*県")

 文字列の前に「*」を付ければ後方一致検索になります。

複数条件でのカウント(AND/OR条件)

AND条件

 複数の条件をともに満たすセルをカウントする例です。
 これについては専用関数といえるCOUNTIFS関数を使うのが賢明です。
 ここでは身長が170以上175以下であるものをカウントしています。

 G3セル

=COUNTIFS(C3:C9,">=170",C3:C9,"<=175")

 COUNTIFS関数を使い、C3:C9の範囲に「170以上」と「175以下」の2つの条件をつけてカウントしています。

OR条件

 「または」の条件をつける場合ですが、単純なケース(両方の条件を満たす値が存在しない)では別々にカウントして足す方法が考えられます。

 G3セル

=COUNTIF(C3:C9,"<170")+COUNTIF(C3:C9,">175")

 「170未満」のセルと「175より大きい」セルをカウントして結果を足しています。
 両方にカウントされるセルがあると二重にカウントしてしまうので、そのような条件になっていないか注意が必要です。



 ところで、次の画像では同じような式で、身長が170未満または出身地が「東京都」のセルをカウントしています。

 G3セル

=COUNTIF(C3:C9,"<170")+COUNTIF(E3:E9,"東京都")

 身長が170未満のセルは2つ、出身地が「東京都」のセルは2つあるので(ピンクの色を付けているセルが該当します)答えは足して「5」になります。
 セルの数を数えるという意味で間違っていないのですが、どちらかを満たす「人数」を数えているつもりだと間違いになるので注意が必要です。このように「両方の条件を満たす値(この場合は行)がある場合にどうカウントするか」というのがなかなか厄介な問題なのですが……



 しかし実はこのような場合でもCOUNTIFでうまくカウントすることができます。

 G3セル

=COUNTIF(ARRAYFORMULA((C3:C9<170)+(E3:E9="東京都")),">0")

 ちょっと難解になりますが、第1引数内で関数式を使うことができるので「+」演算子をを使ってORにあたる論理演算が可能です。これを使って該当する行数を求めています。
 この方法については、AND条件の例も含めて次の記事で紹介しています。

www.officeisyours.com


注意点

 文字列の一致判定基準がExcelより甘くなっており、具体的には全角と半角、大文字と小文字、ひらがなとカタカナを区別せずカウントします
 COUNTIFに限らずそもそもGoogleスプレッドシートのイコール(=)判定がそうなっているのが原因ですが、いずれ二重カウントの原因になりますので注意が必要です。

カウントできない場合

 さまざまな原因でカウントがうまくいかない場合があります。しかもほとんどの場合エラーにならず単に「0」になるため誤りに気付きにくいのが怖いところです。
 代表的な例を次の記事で紹介していますのでご覧ください。

www.officeisyours.com