いきなり答える備忘録

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

(Gスプレッドシート)COUNTIF関数の結果が0になる原因

 GoogleスプレッドシートでCOUNTIF関数を使ったときにカウントできない場合の主な原因と対策をいくつか紹介します。基本的な関数にもかかわらず誤りやすく、しかも気づきにくいため注意を要します。

  • 日付をカウントするとき""で囲んでいない、比較演算子が誤っている、などのケースによりCOUNTIFの結果が「0」になります。ほとんどのミスはエラーにならず、誤っていることに気づきにくいのが注意点です。

原因と対策

似たような別の文字をカウントしている

 見た目がほとんど変わらない別の文字をカウントしようとしているケースです。
 画像ではB列に記録されているマルのようなものをカウントしようとしていますが、実際に記録されているのは漢数字の〇(ゼロ)で、COUNTIFの式で指定しているのは記号の○(マル)です。これではもちろんカウントできません。


 ここでは式の方を漢数字に直すことでカウントすることができました。
 何の文字かわからない場合はコピペしましょう。

日付をカウントするとき""で囲んでいない

 画像では「2022/12/24」という日付をカウントしようとしており、COUNTIF関数の第2引数を「2022/12/24」としています。
 一見よさそうですが、これは「2022割る12割る24」(=7.020…)と解釈されるためうまくカウントできません。


 このときは""(ダブルクォーテーション)を使い「"2022/12/24"」とすることでカウントできます。
 文字列として比較しているようにも見えますが書式の異なる日付もカウントします。「">=2022/12/24"」というような大小比較も正しい結果になります。
 ただ、不安を感じる場合はさらにDATEVALUE関数で囲む(シリアル値に変換して比較される)といった方法が良いでしょう。

文字(書式なしテキスト)と数値を比較している

 文字(書式なしテキスト)として記録されている数字を比較演算子(>=や<など)で比較しようとしてもカウントできません。
 画像では第2引数を「">=5"」とし、5以上の数をカウントしようとしていますがうまくいきません。 


 文字が右寄せされているとさらに紛らわしいです。


 いずれにせよ簡単にカウントする方法は数字の書式を変更することです。
 比較対象の数字が記録されているB3:B7を選択してメニューから「表示形式」→「数字」→「自動」と選択します。


 数値に変換されましたので式を変えることなくカウントできました。


 また、数式の方で対応したい場合は次のような式にすることが考えられます。

 参考

=COUNTIF(ARRAYFORMULA(VALUE(B3:B7)),">=5")

 VALUE関数で数字を数値に変換してからカウントしています。ただしB3:B7の範囲を一括で変換するため、さらにARRAYFORMULA関数で囲む必要があります。

比較演算子が誤っている

 画像では5以上の数をカウントしようとして第2引数を「"=>5"」としていますが、これは比較演算子として無効な表現なのでカウントできていません。
 ちなみにこのようなときは、そのとおりの文字列と解釈されるので、本当に「=>5」と入力されているセルがあればカウントされます。

 正しいのは「">=5"」です。
 同様に「"=<5"」(5以下)も誤りで正しくは「"<=5"」です。


 ほかにも「<>」(ノットイコール)のつもりで「!=」としてしまうケースがあります。プログラミングではよく用いられますが、これも無効な表現です。

セル参照を""の内側に記している

 D3セルと等しい値(5)をカウントしようとしていますが、「"D3"」としているため「D3」という文字と解釈され、うまくカウントできていません。


 これは単に「D3」とすれば解決です。


 こちらは比較しようとしているケース(D3の値以上をカウント)ですが、やはりセル名を""内に入れているためカウントできていません。


 ここではD3を""の外側に置き&でつなぎ、「">="&D3」と、すれば解決です。


比較対象を比較演算子の左側に置いている

 ここでは5以下の数をカウントするつもりで第2引数を「"5>="」としています。
 しかしこれではカウントできません。


 比較対象は比較演算子の右側に置き、比較演算子もそれに合わせる必要があります。
 そこで「"<=5"」と変えることで5以下をカウントしています(データのつくりが悪くて5以上も5以下も3つになりますが)。

備考

 0になる原因ではありませんが、二重にカウントする原因についての補足です。
 ExcelのCOUNTIF関数だと全角文字と半角文字を区別するため異なっているとカウントできない、というケースがありますがGoogleスプレッドシートでは全角半角も大文字小文字も区別せずカウントします。さらに画像にはありませんがひらがなとカタカナも区別しません
 そもそもイコール(=)の判定もそうなので仕方ありませんが、このような関数にも違いが現れています。