ExcelのCOUNT・COUNTA関数|データ数の数え方・違い・VBA自動化

Excelでデータの個数を数えたい?COUNT・COUNTA・COUNTBLANKの違いと使い分けを完全解説します!
- COUNT関数の書式と数値セルだけをカウントする仕組み
- COUNTA関数で空白以外のセルを数える方法
- COUNT・COUNTA・COUNTBLANKの違いを比較表で理解
- COUNTIFとの使い分けと選び方フロー
- 重複除外カウント・日付範囲カウントの応用テクニック
- 空白に見えるのにカウントされない問題の解決法
- VBAでカウント処理を自動化する方法(3パターン)
まずは関数の使い方を解説し、最後にVBA自動化コードも紹介します
COUNT関数とは?数値セルを数える基本
COUNT関数は、指定した範囲内の数値が入力されたセルの個数を返す関数です。文字列や空白セルは無視され、純粋に数値データの件数だけを知りたい場合に使います。
{DIAGRAM_COUNT}COUNT関数の書式と引数
COUNT関数の構文は以下の通りです。
=COUNT(値1, [値2], ...)
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値1 | 必須 | 数値をカウントする最初のセル範囲または値 |
| 値2, … | 任意 | 追加のセル範囲または値(最大255個) |
COUNT関数がカウントするのは数値・日付・数値の文字列表現のみです。文字列(”東京”など)、論理値(TRUE/FALSE)、空白セル、エラー値はカウントされません。
数値のみをカウントする例
以下の売上データでCOUNT関数を使うと、数値が入ったセルだけがカウントされます。
| セル | A列(担当者) | B列(売上) |
|---|---|---|
| 2行目 | 田中 | 150000 |
| 3行目 | 佐藤 | (空白) |
| 4行目 | 鈴木 | 230000 |
| 5行目 | 山田 | 未確定 |
| 6行目 | 中村 | 180000 |
=COUNT(B2:B6) → 結果: 3(数値セルのみカウント)
=COUNTA(B2:B6) → 結果: 4(空白以外すべてカウント)
B3は空白、B5は文字列「未確定」なので、COUNT関数では数値のB2・B4・B6の3件だけがカウントされます。一方、COUNTA関数を使うと文字列も含む4件がカウントされます。
{EXCEL_DEMO}COUNTA関数で空白以外のセルを数える
COUNTA関数は、指定した範囲内の空白でないセルの個数を返します。数値だけでなく、文字列・論理値・エラー値など、何かしらデータが入っているセルをすべてカウントする関数です。
{DIAGRAM_COUNTA}COUNTA関数の書式と引数
=COUNTA(値1, [値2], ...)
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値1 | 必須 | 空白でないセルをカウントする最初のセル範囲または値 |
| 値2, … | 任意 | 追加のセル範囲または値(最大255個) |
COUNTA関数は以下のデータ型をすべてカウントします。
- 数値: 100, 3.14, -50 など
- 文字列: “東京”, “完了” など
- 論理値: TRUE, FALSE
- エラー値: #N/A, #VALUE! など
- 日付・時刻: 内部的に数値なのでカウント対象
COUNTとCOUNTAの違い
COUNT関数とCOUNTA関数の違いを比較表で確認しましょう。
| 比較項目 | COUNT | COUNTA |
|---|---|---|
| カウント対象 | 数値のみ | 空白以外すべて |
| 文字列 | カウントしない | カウントする |
| 論理値(TRUE/FALSE) | カウントしない | カウントする |
| エラー値 | カウントしない | カウントする |
| 日付 | カウントする(数値扱い) | カウントする |
| 空白セル | カウントしない | カウントしない |
| 主な用途 | 数値データの件数を数える | 入力済みセルの件数を数える |
- 売上・金額など数値データの件数を数えたい → COUNT関数
- 名簿・リストの入力済み件数を数えたい → COUNTA関数
- 未入力(空白)セルの数を数えたい → COUNTBLANK関数
COUNTA関数の実践例
社員名簿で入力済みの人数をカウントする例です。
' 基本: A2:A100の入力済みセル数
=COUNTA(A2:A100)
' ヘッダー除外: A列全体からヘッダー1行を引く
=COUNTA(A:A)-1
' 複数範囲: 名前列と部署列の両方が入力済みの件数
=COUNTA(A2:A100) - COUNTBLANK(B2:B100)
=COUNTA(A:A)-1 はデータが追加されても自動的にカウントに含まれるため、動的なデータ件数の取得に便利です。ただし、A列にヘッダー以外の余計なデータがないことが前提となります。
COUNTBLANK関数で空白セルを数える
COUNTBLANK関数は、指定した範囲内の空白セルの個数を返します。データの入力漏れチェックや完了率の計算に活用できます。
COUNTBLANK関数の書式
=COUNTBLANK(範囲)
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 範囲 | 必須 | 空白セルをカウントするセル範囲(1つのみ指定可能) |
COUNTBLANK関数はCOUNTやCOUNTAと異なり、引数は1つの範囲のみです。複数範囲を指定したい場合は、COUNTBLANK(A1:A10)+COUNTBLANK(C1:C10) のように加算します。また、数式の結果が空文字(“”)になっているセルも空白としてカウントされます。
入力漏れチェックの活用法
COUNTBLANK関数を使えば、データ入力フォームの完了率を簡単に計算できます。
' 入力漏れ件数
=COUNTBLANK(B2:B100)
' 入力完了率(パーセント表示)
=1 - COUNTBLANK(B2:B100) / COUNTA(A2:A100)
' 入力漏れがあるかどうか判定
=IF(COUNTBLANK(B2:B100)=0, "入力完了", COUNTBLANK(B2:B100) & "件の未入力あり")
条件付き書式と組み合わせれば、未入力セルを赤くハイライトして視覚的にチェックすることもできます。条件付き書式のルールに「=ISBLANK(B2)」を設定するだけです。
Excel歴10年の筆者が最も助けられたのがCOUNTBLANK関数による入力漏れチェックです。300人分のアンケート回収を管理していたとき、=IF(COUNTBLANK(B2:F2)>0,”未完了”,”完了”)を各行に入れて入力状況を一覧化しました。さらに条件付き書式で「未完了」を赤色にすることで、未入力の回答者を瞬時に特定でき、催促メールの対象者リストをすぐに作成できました。手作業で目視チェックしていた頃と比べて確認時間が10分の1になりました。
Q: COUNTBLANKで数式が=””(空文字)を返しているセルもカウントされますが、これを除外するにはどうすればいいですか?
A: COUNTBLANKは「見た目が空白」のセルをすべてカウントするため、=””の結果も含まれます。純粋な空白セル(何も入力されていない)だけを数えたい場合は =SUMPRODUCT((LEN(B2:B100)=0)*(ISBLANK(B2:B100))*1) で対応できます。ただし実務では=””も空白扱いで問題ないことが多いので、使い分けが必要な場面は限定的です。
COUNTIFとの使い分け
COUNT系関数とCOUNTIF関数は目的が異なります。COUNT/COUNTA/COUNTBLANKは「データの有無」でカウントしますが、COUNTIFは「条件に一致するか」でカウントします。
COUNT系関数の選び方フロー
どの関数を使うべきか迷ったら、以下のフローで判断してください。
{DIAGRAM_COMPARISON}| やりたいこと | 使う関数 | 数式例 |
|---|---|---|
| 数値セルの数を数えたい | COUNT | =COUNT(A1:A100) |
| 入力済みセルの数を数えたい | COUNTA | =COUNTA(A1:A100) |
| 空白セルの数を数えたい | COUNTBLANK | =COUNTBLANK(A1:A100) |
| 条件に一致するセルの数を数えたい | COUNTIF | =COUNTIF(A1:A100,”東京”) |
| 複数条件に一致するセルの数を数えたい | COUNTIFS | =COUNTIFS(A:A,”東京”,B:B,”>=100″) |
COUNTIFで条件付きカウント
COUNTIF関数は「指定した条件に一致するセルの個数」を返します。COUNT系関数では対応できない「特定の値」や「条件に合うデータ」の件数を数える場合に使います。
' 「東京」と入力されたセルの数
=COUNTIF(A1:A100, "東京")
' 100以上の数値の個数
=COUNTIF(B1:B100, ">=100")
' 空白でないセルの数(COUNTAと同じ結果)
=COUNTIF(A1:A100, "<>")
複数条件でカウントしたい場合はCOUNTIFS関数を使います。COUNTIFS関数の使い方と実践例は別記事で詳しく解説しています。
COUNT関数の応用テクニック
基本をマスターしたら、応用テクニックで実務の集計をさらに効率化しましょう。
特定の値だけカウントする方法
ワイルドカードや比較演算子を使って、柔軟な条件でカウントできます。
' 「東京」で始まる文字列の個数
=COUNTIF(A1:A100, "東京*")
' 「田」を含む名前の個数
=COUNTIF(A1:A100, "*田*")
' 100以上200未満の数値の個数(COUNTIFS使用)
=COUNTIFS(B1:B100, ">=100", B1:B100, "<200")
' 今日以降の日付の個数
=COUNTIF(C1:C100, ">="&TODAY())
集計結果をSUM関数と組み合わせれば、件数と合計を同時に把握できます。
重複を除いてカウント(UNIQUE連携)
重複するデータを除いたユニークな件数を数える方法です。
' Excel 365/2021以降: UNIQUE関数で重複除外してカウント
=COUNTA(UNIQUE(A2:A100))
' 旧バージョン対応: SUMPRODUCT + COUNTIF
=SUMPRODUCT(1/COUNTIF(A2:A100, A2:A100))
=SUMPRODUCT(1/COUNTIF(A2:A100, A2:A100)) は、各値の出現回数の逆数を合計します。たとえば「東京」が3回出現する場合、各セルで1/3が計算され、合計すると1になります。これにより重複を自動的に排除できます。ただし、空白セルがあると#DIV/0!エラーになるため、IFERROR関数で対処するか、空白を除外する処理を追加しましょう。
日付範囲でカウント
日付を条件にしたカウントはCOUNTIFS関数が便利です。月別・四半期別の集計にも対応できます。
' 2024年1月の日付の個数
=COUNTIFS(A1:A100, ">=2024/1/1", A1:A100, "<2024/2/1")
' 直近30日間の日付の個数
=COUNTIFS(A1:A100, ">="&TODAY()-30, A1:A100, "<="&TODAY())
' 特定の月のデータ数(MONTH関数と組み合わせ)
=SUMPRODUCT((MONTH(A2:A100)=1)*1)
日付の条件指定で注意が必要なのは、比較演算子と日付を文字列として結合する点です。">="&TODAY() のように、演算子を引用符で囲んで&で日付と結合します。
筆者が日次レポートで必ず使っていたのが =COUNTA(UNIQUE(A2:A100)) による「ユニーク件数」の把握です。例えば注文データで「今日何件の注文があったか」ではなく「今日何社から注文があったか」を知りたいとき、COUNTAとUNIQUEの組み合わせが最適です。旧バージョンの場合はSUMPRODUCT(1/COUNTIF(…))で代替できますが、空白セルが混在するとエラーになるので、データ範囲に空白がないことを先に確認する癖をつけましょう。
Q: COUNTとCOUNTAの結果が一致する場合と異なる場合があるのはなぜですか?
A: COUNTは数値セルのみを数え、COUNTAは空白以外のすべてのセルを数えます。範囲内に文字列や論理値(TRUE/FALSE)が含まれていると結果が異なります。例えば「100, 200, 合計, 300」という4セルの場合、COUNTは3(数値のみ)、COUNTAは4(空白以外すべて)を返します。データが全て数値であれば両者の結果は一致します。
よくあるエラーと対処法
COUNT系関数で結果が期待と異なる場合のトラブルシューティングです。
文字列が含まれてカウントされない
COUNT関数で数値のはずなのにカウントされない場合、そのセルの値が文字列として保存されている可能性があります。
- 確認方法: セルを選択して数式バーを確認。左寄せで表示されていれば文字列
- 原因: CSVインポート時の書式設定ミス、セルの書式が「文字列」になっている
- 対処法1: セルの書式を「標準」に変更してからF2→Enterで再確定
- 対処法2:
=VALUE(A1)で数値に変換、または「区切り位置」機能で一括変換
この問題はIF関数やSUM関数でも同様に発生します。CSVデータを扱う際は特に注意しましょう。
空白に見えるのにCOUNTBLANK=0
セルが空白に見えるのにCOUNTBLANKでカウントされない「幽霊スペース」問題は、実務で頻繁に遭遇します。
- 半角/全角スペース: 見えないが文字として認識される →
=LEN(A1)で文字数を確認 - 改行コード: Alt+Enterで入力された改行が残っている →
=CLEAN(A1)で除去 - 空文字(“”): 数式の結果が空文字の場合、空白に見えるがデータあり扱い →
=A1=""でTRUEなら空文字 - アポストロフィ: セル先頭の ‘ が見えない文字として残る
' 不可視文字を含む「見かけ上の空白」をクリーンアップ
=TRIM(CLEAN(A1))
' 一括クリーンアップ(作業列に数式を入れて値貼り付け)
=IF(TRIM(CLEAN(A1))="", "", TRIM(CLEAN(A1)))
結果が期待と異なる場合の確認手順
COUNT系関数の結果がおかしいと感じたら、以下の手順で原因を特定してください。
- 手順1: 関数の選択を確認(COUNT vs COUNTA vs COUNTBLANK)
- 手順2: 範囲指定が正しいか確認(ヘッダー行を含んでいないか)
- 手順3:
=LEN(セル)で文字数を確認(0なら本当の空白、1以上なら見えない文字あり) - 手順4:
=TYPE(セル)でデータ型を確認(1=数値, 2=文字列, 4=論理値, 16=エラー) - 手順5: フィルターで非表示行がないか確認(SUBTOTAL関数で表示行のみカウント可能)
エラー値が混在している場合はIFERROR関数でエラーを処理してからカウントすると正確な結果が得られます。
VBAでカウント処理を自動化する
大量のデータや複数シートにまたがるカウント処理は、VBAで自動化すると大幅に効率化できます。ここでは実務で使える3パターンのVBAコードを紹介します。
WorksheetFunction.Countの使い方
VBAからExcelのCOUNT/COUNTA関数を呼び出す基本パターンです。
Sub CountDataBasic()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim rng As Range
Set rng = ws.Range("B2:B100")
' 数値セルの個数(COUNT関数と同じ)
Dim numCount As Long
numCount = WorksheetFunction.Count(rng)
' 空白以外のセルの個数(COUNTA関数と同じ)
Dim dataCount As Long
dataCount = WorksheetFunction.CountA(rng)
' 空白セルの個数(COUNTBLANK関数と同じ)
Dim blankCount As Long
blankCount = WorksheetFunction.CountBlank(rng)
' 結果を表示
MsgBox "数値セル: " & numCount & vbCrLf & _
"入力済みセル: " & dataCount & vbCrLf & _
"空白セル: " & blankCount, _
vbInformation, "カウント結果"
End Sub
WorksheetFunctionを使えば、ワークシート関数と同じロジックをVBAから直接実行できます。結果をメッセージボックスで表示するだけでなく、セルに書き込んだりメールで送信したりと、後続処理に連携しやすいのがVBAのメリットです。
条件付きカウントVBA
COUNTIFでは対応しにくい複雑な条件でのカウント処理をVBAで実装します。
Sub CountWithConditions()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim countOver100 As Long ' 100以上の数値
Dim countText As Long ' 文字列セル
Dim countError As Long ' エラーセル
Dim i As Long
For i = 2 To lastRow
Dim cell As Range
Set cell = ws.Cells(i, 2) ' B列を対象
If IsError(cell.Value) Then
countError = countError + 1
ElseIf IsNumeric(cell.Value) And Not IsEmpty(cell.Value) Then
If cell.Value >= 100 Then
countOver100 = countOver100 + 1
End If
ElseIf Not IsEmpty(cell.Value) Then
countText = countText + 1
End If
Next i
' 結果をサマリーシートに出力
Dim summary As Worksheet
On Error Resume Next
Set summary = Worksheets("集計結果")
On Error GoTo 0
If summary Is Nothing Then
Set summary = Worksheets.Add(After:=Worksheets(Worksheets.Count))
summary.Name = "集計結果"
End If
summary.Range("A1").Value = "条件"
summary.Range("B1").Value = "件数"
summary.Range("A2").Value = "100以上の数値"
summary.Range("B2").Value = countOver100
summary.Range("A3").Value = "文字列セル"
summary.Range("B3").Value = countText
summary.Range("A4").Value = "エラーセル"
summary.Range("B4").Value = countError
MsgBox "集計完了!「集計結果」シートを確認してください。", vbInformation
End Sub
VBAのループ処理なら、IsError・IsNumeric・IsEmptyなどの判定関数を組み合わせて、ワークシート関数では難しい複雑な条件分岐が可能です。
複数シート集計VBA
複数シートに分散したデータの件数を一括集計するVBAです。月別シートの集計などに活用できます。
Sub CountAcrossSheets()
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim ws As Worksheet
Dim totalCount As Long
Dim totalData As Long
Dim totalBlank As Long
Dim resultMsg As String
resultMsg = "=== 全シート集計結果 ===" & vbCrLf & vbCrLf
For Each ws In wb.Worksheets
' 「集計」シートはスキップ
If ws.Name <> "集計結果" And ws.Name <> "目次" Then
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If lastRow >= 2 Then
Dim rng As Range
Set rng = ws.Range("B2:B" & lastRow)
Dim numCnt As Long
Dim dataCnt As Long
Dim blankCnt As Long
numCnt = WorksheetFunction.Count(rng)
dataCnt = WorksheetFunction.CountA(rng)
blankCnt = WorksheetFunction.CountBlank(rng)
resultMsg = resultMsg & ws.Name & ": " & _
"数値=" & numCnt & _
" / データ=" & dataCnt & _
" / 空白=" & blankCnt & vbCrLf
totalCount = totalCount + numCnt
totalData = totalData + dataCnt
totalBlank = totalBlank + blankCnt
End If
End If
Next ws
resultMsg = resultMsg & vbCrLf & _
"【合計】" & vbCrLf & _
"数値セル合計: " & totalCount & vbCrLf & _
"データセル合計: " & totalData & vbCrLf & _
"空白セル合計: " & totalBlank
MsgBox resultMsg, vbInformation, "複数シート集計"
End Sub
このVBAは全シートのB列を対象にCOUNT・COUNTA・COUNTBLANKを実行し、シートごとの結果と合計を表示します。対象列やスキップするシート名は実務に合わせてカスタマイズしてください。
よくある質問(FAQ)
Q. COUNTとCOUNTAの違いは何ですか?
COUNT関数は数値が入ったセルだけをカウントし、COUNTA関数は空白以外のすべてのセル(数値・文字列・論理値・エラー値)をカウントします。名簿の人数を数えるならCOUNTA、売上データの数値件数を数えるならCOUNTを使います。
Q. COUNTAで空白セルもカウントされてしまうのはなぜ?
セルが空白に見えても、スペースや空文字(“”)が入っている場合があります。=LEN(セル)で文字数を確認し、0でなければ見えない文字が入っています。=TRIM(CLEAN(セル))で不要な文字を除去してからCOUNTAを使いましょう。
Q. COUNTBLANKで空白セルの数が合わないのはなぜ?
数式の結果が空文字(“”)になっているセルは、COUNTBLANKでは空白としてカウントされます。一方、スペースのみのセルは空白とみなされません。=SUBSTITUTE(セル,” “,””)=”” で、スペースだけのセルかどうかを確認できます。
Q. COUNT関数で日付はカウントされますか?
はい、Excelでは日付は内部的にシリアル値(数値)として扱われるため、COUNT関数でカウントされます。ただし、文字列として入力された日付(例: “2024/1/1” をセルの書式が「文字列」の状態で入力した場合)はカウントされません。
Q. COUNTA(A:A)-1 は何を意味しますか?
A列全体のデータ数からヘッダー行の1を引く式です。データが追加されても自動的にカウントに含まれるため、動的なデータ件数の取得に便利です。ただし、A列にヘッダー以外の余計なデータがないことが前提です。
まとめ
この記事では、ExcelのCOUNT・COUNTA・COUNTBLANK関数の使い方を基本から応用、VBA自動化まで解説しました。
- COUNT関数: 数値セルだけをカウント。売上・金額データの件数に最適
- COUNTA関数: 空白以外すべてカウント。名簿・リストの入力件数に最適
- COUNTBLANK関数: 空白セルをカウント。入力漏れチェックに最適
- 使い分け: データの有無→COUNT系、条件一致→COUNTIF/COUNTIFS
- 応用: UNIQUE連携で重複除外、COUNTIFS+日付で期間集計
- VBA: WorksheetFunction.Count/CountA/CountBlankで自動化可能
まずはCOUNTとCOUNTAの違いを理解し、用途に応じて使い分けることが大切です。空白チェックにはCOUNTBLANK、条件付きカウントにはCOUNTIFと、状況に合った関数を選べるようになれば、Excelの集計作業が格段にスムーズになります。
Excelスキルを活かしてSNS運用も自動化しませんか?
Excelの関数をマスターしたあなたなら、Googleスプレッドシート×GAS(Google Apps Script)を使ったSNS自動化ツールもすぐに使いこなせます。X(Twitter)やThreadsの予約投稿を、月額0円で自動化する方法をまとめています。
→ SNS予約投稿ツール完全ガイド|無料&買い切りツールを徹底比較
VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。
LINEでExcelを気軽に学べる
