COUNTは、数値が入っているセルの個数を数える関数です。
名前が似た関数が複数あり、どれを使うべきか迷いやすいのがこの関数の実務上の課題です。この記事ではその違いを整理します。
書式
=COUNT(範囲1, [範囲2], ...)
数え方の違いを整理する
| 関数 | 数えるもの |
|---|---|
| COUNT | 数値が入っているセル |
| COUNTA | 空欄でないセル(文字列・数式の結果も含む) |
| COUNTBLANK | 空欄のセル |
| COUNTIF | 条件に合うセル |
| COUNTIFS | 複数条件に合うセル |
次の表で実際に確認します。
| A | |
|---|---|
| 1 | 120 |
| 2 | りんご |
| 3 | (空欄) |
| 4 | 250 |
| 5 | 2026/4/1 |
=COUNT(A1:A5) → 3
=COUNTA(A1:A5) → 4
=COUNTBLANK(A1:A5) → 1
COUNTが3になるのは、日付も数値として数えられるからです。スプレッドシートもExcelも、日付は内部的に数値(シリアル値)で保持しています。
「りんご」は文字列なのでCOUNTでは数えられません。
実務での使い分け
入力済みの行数を数えたい → COUNTA
最も多い用途です。
=COUNTA(A2:A1000)
文字列の列にCOUNTを使うと0になります。 「なぜか0になる」という相談の大半がこれです。
数値として認識されているか確認したい → COUNT
これがCOUNTの最も有用な使い方です。
=COUNT(A2:A100)
これが行数より少なければ、数値のはずの列に文字列が混ざっています。他システムからコピーしたデータやCSVでよく起きます。
SUM の合計が合わないときは、まずこれで確認してください。原因の切り分けが一発でできます。
未入力を数えたい → COUNTBLANK
=COUNTBLANK(B2:B100)
入力漏れのチェックに使います。
可変範囲を作りたい → COUNTA
OFFSET と組み合わせて、データ量に追従する範囲を作れます。
=OFFSET(A2, 0, 0, COUNTA(A2:A1000), 1)
数式が返した空文字の扱い
ここが最大の落とし穴です。
=IF(A2="", "", A2*1.1)
このような数式が入ったセルは、見た目は空欄ですが、空欄ではありません。
| 関数 | 数式が返した "" を |
|---|---|
| COUNTA | 1件として数える |
| COUNTBLANK | 空欄として数える |
ISBLANK |
FALSE を返す |
COUNTAとCOUNTBLANKで扱いが違うため、両方を足しても全体の件数にならないことがあります。
対策: 数式の入った列で件数を数えるなら、COUNTIF で空でないものを数えるほうが確実です。
=COUNTIF(A2:A100, "<>")
この書き方なら、数式が返した "" は数えられません。見た目通りの件数が得られます。
複数範囲を数える
離れた範囲をまとめて数えられます。
=COUNT(A1:A10, C1:C10, E5)
条件付きで数えたいとき
条件を付けるなら COUNTIF または COUNTIFS を使います。
=COUNTIF(A:A, "東京")
=COUNTIFS(A:A, "東京", B:B, ">=1000")
重複を除いて数えたい
COUNTシリーズでは直接できません。 方法は2つあります。
UNIQUE と組み合わせる(スプレッドシート)
=COUNTA(UNIQUE(A2:A100))
COUNTIF で逆数を足す(Excelでも動く)
=SUMPRODUCT(1/COUNTIF(A2:A100, A2:A100))
同じ値がn個あれば 1/n がn回足されて1になる、という仕組みです。範囲に空欄があると #DIV/0! になるので、空欄のない範囲に限定してください。
スプレッドシートなら QUERY でも書けます。
=QUERY(A:A, "select count(A) group by A", 1)
よくある失敗
0になる
文字列の列にCOUNTを使っています。 COUNTA を使ってください。
想定より多い
数式が返した "" を数えています。 =COUNTIF(範囲, "<>") に切り替えてください。
想定より少ない
数値のはずの列に文字列が混ざっています。 これはCOUNTの誤りではなく、データ側の問題です。セルが左寄せになっていないか確認してください。
空欄を数えたのに合わない
COUNTBLANKは数式が返した "" を空欄として数えます。厳密に「何も入力されていない」を数えたいなら、ISBLANK を使った配列計算が必要です。
=SUMPRODUCT(--ISBLANK(A2:A100))
Excelとの違い
COUNT・COUNTA・COUNTBLANK・COUNTIF・COUNTIFS はすべて共通です。書式も挙動も同じです。
違いは代替手段です。
数え方が食い違う原因を構造から理解する
件数が合わないという相談は、集計の中でもとりわけ多いものです。原因は、数える関数によって「何を数えるか」の定義が違うことにあります。この定義さえ押さえれば、食い違いは起きなくなります。
数値だけを数える関数は、文字列も論理値も空白も無視します。したがって、金額の列に文字列として入っている数字があれば、その分だけ件数が少なくなります。金額そのものは表示されているので、目で数えた件数とは合いません。
空白以外を数える関数は、文字列も論理値もエラーもすべて数えます。中身が何であれ、何か入っていれば一件です。この関数で数えた件数と、数値だけを数えた件数の差が、そのまま「数値でないものの件数」になります。この差を見るのが、原因を切り分ける最初の一手です。
空白を数える関数は、何も入っていないセルを数えます。ここで問題になるのが、数式が返した空文字です。見た目には空欄ですが、セルには数式が入っており、その結果として空文字が返っています。この状態は「空白」ではないため、空白を数える関数では数えられず、空白以外を数える関数では一件として数えられます。
つまり、目で見た空欄と、関数が判定する空白は一致しないことがある、というのが核心です。ここを理解していれば、件数が合わない理由はすぐ分かります。
空文字が生む混乱を避ける設計
数式で条件に合わないときに空文字を返す書き方は広く使われていますが、後工程で混乱を生みます。件数が合わない、平均がずれる、並べ替えで空欄が先頭に来る。いずれも空文字が原因です。
対処の方針は二つあります。
ひとつは、空文字を返さない設計にすることです。条件に合わない場合はゼロを返し、表示のほうを工夫します。表示形式でゼロを非表示にすれば、見た目は空欄になります。データとしては数値なので、集計も並べ替えも素直に動きます。
もうひとつは、空文字を返すことを前提に、後工程の関数を選ぶことです。件数を数えるときは、空白以外ではなく数値だけを数える関数を使う。平均を出すときは、空文字が混ざっても無視される関数を選ぶ。この方針でも構いませんが、後工程を触るたびに気をつける必要があります。
どちらを選ぶかは、そのファイルを誰が触るかで決めてください。自分だけなら後者でも回りますが、他人が触るなら前者のほうが事故が少なくなります。
条件付きで数えるときの選択
条件を付けて数えたい場合、条件がひとつなら条件付きの件数関数、複数なら条件を複数指定できる関数を使います。書き方は集計の関数と同じ考え方です。
注意すべきは、条件に空白を指定する場合です。空白を数える意図で条件に空文字を書くと、環境によって挙動が変わります。確実に空白を数えたいなら、専用の関数を使ってください。
もうひとつ、条件に該当するものがゼロ件の場合、返るのはゼロであってエラーではありません。エラーが出る場合は、条件の書き方か範囲の指定に問題があります。
条件が「一覧に含まれるか」である場合は、条件を一つずつ書くより、一覧との突き合わせを考えるほうが保守しやすくなります。一覧が増えても数式を触らずに済みます。
重複を除いた件数を知りたい場合は、件数を数える関数だけでは書けません。重複を除く関数で一覧を作ってから数えるか、配列を扱う書き方をする必要があります。→ UNIQUE関数の使い方 / 重複を削除・抽出する方法
検算に使うという発想
件数を数える関数は、集計の正しさを確かめる道具としても使えます。集計表を作ったら、必ず件数で検算してください。
たとえば、条件付きの集計表を作った場合、各条件の件数を合計すると、元データの全件数と一致するはずです。一致しなければ、どこかの条件が漏れているか、重複して数えられています。この検算は数十秒で終わりますが、見つかる誤りは大きなものです。
同じ考え方で、数値だけを数えた件数と、空白以外を数えた件数を並べて表示しておく方法もあります。差がゼロでなければ、数値でないものが混ざっている合図です。データを取り込むたびに確認できます。
さらに、想定件数をセルに書いておき、実際の件数と一致するかを判定する数式を置く方法もあります。取り込み漏れや重複に気づけます。
集計表を作ったら検算の仕組みも一緒に作る、という習慣をつけると、静かに間違ったまま使い続ける事故を防げます。
集計表に必ず入れる検算
集計表を作ったら、その正しさを確かめる仕組みを一緒に作ってください。数式を数本足すだけで、静かに間違ったまま使い続ける事故を防げます。
第一に、区分ごとの件数を合計して、元データの全件数と一致するかを確認します。一致しなければ、どこかの条件が漏れているか、重複して数えられています。
第二に、区分ごとの合計を合計して、元データの総計と一致するかを確認します。件数が合っていても金額が合わないことがあります。
第三に、数値だけを数えた件数と、入力済みの件数を比べます。差があれば、文字列として入っている数値があります。
第四に、想定される件数をセルに書いておき、実際の件数と一致するかを判定します。取り込み漏れや二重取り込みに気づけます。
これらの判定結果を、表の上部に真偽値で並べておきます。すべてが真であることを確認してから、その集計表を使う。この習慣がつけば、報告した数字が後から覆ることはなくなります。
検算の数式は、集計表と同時に作ってください。後から足そうと思うと、たいてい忘れます。集計表のひな形に最初から組み込んでおくのが確実です。
よくある質問
Q. 目で数えた件数と合いません
数値だけを数える関数を使っていて、文字列が混ざっている可能性があります。空白以外を数える関数と比べて、差を確認してください。
Q. 空欄なのに数えられます
数式が空文字を返している状態です。セルを選んで数式バーを見れば、数式が入っているか分かります。
Q. 日付は数えられますか
日付は内部的に数値なので、数値だけを数える関数で数えられます。文字列として入っている日付は数えられません。
Q. 論理値は数えられますか
数値だけを数える関数では数えられません。空白以外を数える関数では数えられます。
Q. エラーが混ざっていても数えられますか
空白以外を数える関数はエラーも一件として数えます。数値だけを数える関数は無視します。
Q. 複数の範囲をまとめて数えられますか
できます。範囲をカンマで区切って並べてください。
Q. 非表示の行も数えますか
数えます。表示されている行だけを数えたい場合は、小計の関数を使ってください。→ SUBTOTAL関数の使い方
Q. 重くなることはありますか
範囲を列全体で指定すると負荷がかかります。実際にデータのある範囲に絞ってください。
まとめ
- COUNT は数値だけを数える。日付も数値として数えられる
- 入力済みの行数を数えたいなら COUNTA
- COUNTが行数より少なければ、文字列が混ざっている — 合計が合わないときの切り分けに使える
- 数式が返した
""は COUNTAでは1件として数えられる - 見た目通りに数えたいなら
=COUNTIF(範囲, "<>")
