「営業部の担当者が何人いるか数えたい」「商品名が入力されているレコードだけカウントしたい」。こんな場面で、フィルタをかけて目視で数えていませんか。
条件が変わるたびにフィルタをかけ直すのは面倒ですよね。しかも、数値以外のデータが混ざっていると普通のDCOUNT関数では拾えません。「未定」「保留」のような文字列ステータスがあると、本来カウントしたいレコードまで漏れてしまうのです。
そんなときに使えるのがDCOUNTA関数です。条件を別のセル範囲に書いておくだけで、数値も文字列も含めて空白以外のセルを自動でカウントしてくれます。条件セルを書き換えるだけで集計が切り替わるので、定型レポートやダッシュボードと相性抜群です。
この記事では、DCOUNTA関数の基本構文から、DCOUNT関数との違い、AND/OR条件の書き分け、ワイルドカードや比較演算子を使った高度な条件指定、COUNTIFS関数との使い分け、よくあるエラー、FAQまでまとめて紹介します。読み終わるころには「条件付きカウントはDCOUNTAで一発」と自信を持って言えるようになりますよ。
スプレッドシートのDCOUNTA関数とは? — 条件に合う空白以外のセルを数える
DCOUNTA関数(読み方: ディー カウント エー)は、データベース形式の表から条件に合うレコードを探し、指定した列の空白以外のセルの個数を返す関数です。
名前は「Database COUNT A(データベースのカウントA)」の略です。末尾の「A」は「All(すべて)」を意味します。COUNT関数とCOUNTA関数の関係(数値のみ vs 空白以外すべて)と、DCOUNTとDCOUNTAの関係はまったく同じです。普段COUNTAを使っている人なら、その「条件付き版」と覚えればすんなり頭に入ります。
DSUM(条件付き合計)やDAVERAGE(条件付き平均)と同じ「データベース関数」の仲間です。引数の指定方法(データベース範囲・フィールド・条件範囲の3つ)はファミリー全体で共通なので、1つ覚えれば芋づる式に他の関数も使えるようになります。
DCOUNTA関数の特徴をまとめると、次のとおりです。
- 条件をセル範囲(条件範囲)で指定するスタイル
- 条件範囲を書き換えるだけで集計条件をすぐ切り替えられる
- 複数条件(AND条件・OR条件)にも対応
- 数値・文字列・論理値など、空白以外のセルすべてをカウントする
- 見出し付きのリスト形式のデータが前提
- ワイルドカード(
*・?)や比較演算子(>・<・<>)にも対応
NOTE
DCOUNTA関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同じ関数があるので、ファイル形式を変換しても式が壊れません。社内でExcel派とスプレッドシート派が混在していても安心して使えます。
DCOUNT関数との違い(数値のみ vs 文字列も含む)
DCOUNTA関数とよく似た関数にDCOUNT関数があります。最大の違いは「何をカウントするか」です。名前が一文字違うだけで結果がまったく変わるので、最初にしっかり押さえておきましょう。
| 比較項目 | DCOUNT関数 | DCOUNTA関数 |
|---|---|---|
| カウント対象 | 数値セルのみ | 空白以外のすべてのセル |
| 文字列セル | カウントしない | カウントする |
| 論理値(TRUE/FALSE) | カウントしない | カウントする |
| エラー値(#N/A など) | カウントしない | カウントする |
| 空白セル | カウントしない | カウントしない |
| 空文字列("") | カウントしない | カウントする |
具体例で違いを見てみましょう。次のデータがあるとします。
| A | B | C | |
|---|---|---|---|
| 1 | 部署 | 担当者 | 金額 |
| 2 | 営業部 | 田中 | 150000 |
| 3 | 営業部 | 佐藤 | 未定 |
| 4 | 営業部 | 山本 |
条件範囲に「部署 = 営業部」を指定して金額列をカウントすると、次のようになります。
=DCOUNT(...)→ 1(数値の150000だけカウント。「未定」は文字列、4行目は空白なので対象外)=DCOUNTA(...)→ 2(150000と「未定」の2件をカウント。空白の4行目だけ対象外)
使い分けのポイント: 金額や数量など数値だけ数えたいならDCOUNT関数。何かしら入力されているかどうか(進捗ステータス・担当者・コメント欄など)を知りたいならDCOUNTA関数を使いましょう。実務でよくあるのは「対応ステータス」のような列で、「未対応」「保留」「完了」が混在しているケース。DCOUNTAなら全部まとめて拾えますが、DCOUNTでは0が返ってしまいます。
DCOUNTA関数の書き方(構文と引数)
基本構文
=DCOUNTA(データベース, フィールド, 条件)
引数は3つです。すべて必須で、省略はできません。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| データベース | 必須 | 見出し行を含むデータ範囲(例: A1:D100) |
| フィールド | 必須 | カウントする列の見出し名(文字列)または列番号(数値) |
| 条件 | 必須 | 条件を記述したセル範囲(見出し行+条件行) |
それぞれ詳しく見ていきましょう。
データベース(第1引数)
データベースには、見出し行を含めたデータ範囲を指定します。先頭行に列の見出し(「部署」「担当者」「商品」など)が入っている必要があります。見出しがないとフィールドの参照ができないので、必ずヘッダー行を含めてください。
データが今後増えていくシートでは、A1:D7 のような固定範囲ではなく A1:D のように列指定(最終行を省略)で書くと、行が増えても式を直さずに済みます。ただし範囲全体のスキャンが入るので、シートが極端に巨大なときは固定範囲のほうが軽くなります。
フィールド(第2引数)
カウントしたい列を指定します。指定方法は2つあります。
- 文字列で指定:
"担当者"のように、見出しと同じ文字列をダブルクォーテーションで囲む - 数値で指定: データベースの左端列を1として、列の位置を数値で指定する(2列目なら
2)
文字列で指定するほうが、あとから見たとき何の列かわかりやすいのでおすすめです。列の挿入や並び替えがあっても式が壊れにくいというメリットもあります。逆に数値指定だと、列を1つ追加しただけで参照先がズレるので注意してください。
条件(第3引数)
条件範囲には、見出し行と条件行の2行以上のセル範囲を指定します。これはDCOUNT関数や他のデータベース関数と完全に同じ仕組みです。
条件範囲の作り方は次のとおりです。
- 1行目に見出しを書く -- データベースの見出しと完全に同じ文字列を使う
- 2行目以降に条件値を書く -- 一致させたい値を入力する
条件範囲はシートのどこに作っても構いません。ただし、データベースの直下に作ると行を追加するたびにレイアウトを直す羽目になるので、別の場所(右側の空きエリア・別シートなど)に切り出すのが定番です。
TIP
フィールドに列番号を使う場合、データベース範囲の左端が1です。シートのA列が1とは限らないので注意してください。たとえば
=DCOUNTA(C1:F100, 2, ...)ならD列がカウント対象になります。
DCOUNTA関数の基本的な使い方
サンプルデータと完成イメージ
次のような売上データを使って説明します。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 部署 | 担当者 | 商品 | 金額 |
| 2 | 営業部 | 田中 | ノートPC | 150000 |
| 3 | 総務部 | 鈴木 | プリンター | 35000 |
| 4 | 営業部 | 佐藤 | モニター | 48000 |
| 5 | 経理部 | 高橋 | ノートPC | 150000 |
| 6 | 営業部 | 田中 | キーボード | 8000 |
| 7 | 総務部 | 伊藤 | モニター | 48000 |
「営業部」の担当者列に値が入っているレコードの件数を数えてみましょう。完成イメージは、DCOUNTA関数の結果が 3 と表示される状態です。
手順:数式の入力
まず、シートの空いているエリア(たとえばF1:F2)に条件範囲を作ります。
| F | |
|---|---|
| 1 | 部署 |
| 2 | 営業部 |
条件範囲の見出し「部署」は、データベースの見出しと完全一致させてください。コピー&ペーストで作ると確実です。全角と半角の違い、前後のスペース、似た文字(「部」と「部 」)に気付かずハマることが多いので要注意です。
次に、数式を入力します。
=DCOUNTA(A1:D7, "担当者", F1:F2)
結果は 3 です。営業部の3件(田中、佐藤、田中)すべてに担当者名が入っているので、3件がカウントされます。
DCOUNTA関数は文字列もカウントするので、担当者のようなテキスト列でも問題なく使えますよ。
TIP
条件範囲の見出しは、データベースの見出しと1文字でも違うと正しく動きません。コピー&ペーストで作ると確実です。
フィールドを変えるだけで違う列を数える
同じ条件範囲(営業部)のままフィールドだけ変えれば、別の列の入力件数を一発で出せます。
=DCOUNTA(A1:D7, "商品", F1:F2) → 3(営業部の商品列)
=DCOUNTA(A1:D7, "金額", F1:F2) → 3(営業部の金額列)
商品列・金額列にも全部値が入っているので結果は同じ3ですが、もし「金額が未入力のレコードがある」場合はDCOUNTA関数なら自然と除外できます。「条件に合うレコード数を知りたい列」を切り替えられるのはDCOUNTAならではの便利さです。
複数条件でのDCOUNTA関数の使い方
AND条件(同じ行に複数条件を書く)
「営業部」かつ「担当者が田中」のように、複数の条件をすべて満たすレコードだけ数えたい場合です。
AND条件は、条件範囲の同じ行に複数の見出し・条件値を横に並べて書きます。
| F | G | |
|---|---|---|
| 1 | 部署 | 担当者 |
| 2 | 営業部 | 田中 |
=DCOUNTA(A1:D7, "商品", F1:G2)
結果は 2 です。営業部かつ田中のレコードは2件あります。商品列にはどちらも値が入っているので、2件がカウントされます。
OR条件(行を分けて複数条件を書く)
「営業部」または「経理部」のように、どちらかの条件に合うレコードを数えたい場合です。
OR条件は、条件値を別の行に書くのがポイントです。
| F | |
|---|---|
| 1 | 部署 |
| 2 | 営業部 |
| 3 | 経理部 |
=DCOUNTA(A1:D7, "担当者", F1:F3)
結果は 4 です。営業部3件(田中、佐藤、田中)+ 経理部1件(高橋)で合計4件になります。
同じ行に書くとAND条件、別の行に書くとOR条件。このルールはデータベース関数すべてに共通なので、覚えておきましょう。
AND条件とOR条件を組み合わせる
「営業部で商品がノートPC」または「総務部で商品がモニター」をカウントする場合です。
| F | G | |
|---|---|---|
| 1 | 部署 | 商品 |
| 2 | 営業部 | ノートPC |
| 3 | 総務部 | モニター |
=DCOUNTA(A1:D7, "金額", F1:G3)
結果は 2 です。営業部のノートPCが1件、総務部のモニターが1件で合計2件になります。
「2行目=AND、3行目=AND、行同士はOR」と読むのがコツです。エクセルで言うAND/ORの混合フィルタを、シート上にビジュアルで書いている感覚に近いですね。
より細かい条件指定:ワイルドカード・比較演算子
ワイルドカードで部分一致検索
DCOUNTA関数の条件には、*(任意の文字列)と ?(任意の1文字)のワイルドカードが使えます。商品名や担当者名の「〜を含む」「〜で始まる」検索に便利です。
| F | |
|---|---|
| 1 | 商品 |
| 2 | ノート* |
=DCOUNTA(A1:D7, "担当者", F1:F2)
「ノート」で始まる商品(ノートPC)だけ拾えるので、結果は 2 です(田中・高橋)。
| 条件値 | 意味 |
|---|---|
ノート* | 「ノート」で始まる |
*PC | 「PC」で終わる |
モニ | 「モニ」を含む |
?ーター | 「ーター」の前に1文字(「モ」「キ」など) |
比較演算子で数値の範囲指定
数値列なら、>・<・>=・<=・<> を使った範囲指定もできます。「金額が5万円以上」のような条件をシンプルに書けます。
| F | |
|---|---|
| 1 | 金額 |
| 2 | >=50000 |
=DCOUNTA(A1:D7, "担当者", F1:F2)
金額が5万円以上のレコード(150000・150000)が対象なので、結果は 2 です。
| 条件値 | 意味 |
|---|---|
>=50000 | 5万円以上 |
<10000 | 1万円未満 |
<>0 | 0以外 |
>=2024/4/1 | 2024年4月1日以降(日付列) |
完全一致したいときは ="=○○" の書き方
条件値が "営業" だけだと、デフォルトで「営業で始まる」(前方一致)として解釈されます。たとえば「営業部」「営業1課」も拾ってしまうのです。完全一致で「営業」だけを拾いたいときは、特殊な記法を使います。
| F | |
|---|---|
| 1 | 部署 |
| 2 | ="=営業" |
ダブルクォーテーションの中に =営業 と書くのがポイントです。これで「営業」と完全一致するレコードだけがカウントされます。前方一致のせいで件数が思ったより多くなるトラブルの定番対策なので、覚えておくと役立ちますよ。
DCOUNTA関数とCOUNTIFS関数の使い分け
スプレッドシートで条件付きカウントをするなら、COUNTIFS関数も選択肢に入ります。どちらを選ぶか迷う方が多いので、違いを整理します。
| 比較項目 | DCOUNTA関数 | COUNTIFS関数 |
|---|---|---|
| 条件の指定方法 | セル範囲(条件範囲) | 数式の引数に直接書く |
| カウント対象 | 空白以外のセルすべて | 条件に合うセルすべて |
| OR条件 | 条件範囲の行を追加するだけ | COUNTIFS同士を足し算で対応 |
| 条件の切り替えやすさ | セルを書き換えるだけ | 数式を編集する必要あり |
| 数式の見やすさ | シンプル(引数3つ固定) | 条件が多いと数式が長くなる |
| 条件範囲の管理 | シート上にスペースが必要 | 数式内で完結 |
| 複雑なAND/OR混合 | 行と列で表現できて直感的 | 関数の足し算・掛け算が必要 |
使い分けのポイント:
- 条件が固定で変わらない → COUNTIFS関数がシンプルでおすすめ
- 条件を頻繁に切り替えたい → DCOUNTA関数が便利(セルを変えるだけで結果が変わる)
- OR条件が複雑 → DCOUNTA関数のほうが直感的に書ける
- 条件範囲のスペースを取りたくない → COUNTIFS関数で数式内に完結させる
- 複数の集計を切り替えるダッシュボード → DCOUNTA関数(条件範囲を共有して、フィールドだけ変える)
実務では、定型レポートの集計にDCOUNTA関数、単発の集計にCOUNTIFS関数と使い分けるとスムーズですよ。とくに毎月作る進捗管理表のような「条件は同じだけど月によって値が変わる」ケースは、条件範囲をプルダウンで切り替えられるDCOUNTAが圧倒的に便利です。
他のデータベース関数との連携
DCOUNTA関数は単独で使うだけでなく、他のデータベース関数と組み合わせると集計テーブルの幅が広がります。同じ条件範囲を使い回せるので、入力欄1つで複数の指標が同時に切り替わる仕組みが作れます。
| 関数 | 役割 | 用途例 |
|---|---|---|
| DCOUNT | 条件付きで「数値」だけカウント | 金額が入力済みの件数 |
| DCOUNTA | 条件付きで「空白以外」をカウント | 担当者がアサイン済みの件数 |
| DSUM | 条件付き合計 | 部署別売上合計 |
| DAVERAGE | 条件付き平均 | 部署別平均単価 |
| DMAX | 条件付き最大値 | 部署別最高売上 |
| DMIN | 条件付き最小値 | 部署別最低売上 |
| DGET | 条件に合う1件を取得 | 顧客IDから1レコード抽出 |
たとえば「営業部のレポート」を作るなら、F1:F2 に「部署 / 営業部」と書くだけで、件数(DCOUNTA)・合計(DSUM)・平均(DAVERAGE)・最大(DMAX)が一気に切り替わります。条件範囲を共有するアーキテクチャはダッシュボード作りの王道です。
よくあるエラーと対処法
DCOUNTA関数で「思った結果にならない」ケースをまとめました。
| 症状 | 原因 | 対処法 |
|---|---|---|
| 結果が0になる | 条件範囲の見出しがデータベースの見出しと一致していない | 見出しをコピー&ペーストして完全一致させる |
| 結果が0になる | 条件値の前後に余分なスペースが入っている | TRIM関数でスペースを除去するか、手入力し直す |
| #VALUE! エラー | フィールドに存在しない列名を指定している | データベースの見出しと同じ文字列を使う |
| #VALUE! エラー | 引数が不足している(3つ未満) | データベース・フィールド・条件の3つすべてを指定する |
| 想定より大きい値が返る | 条件範囲に空白行が含まれている | 条件範囲を必要な行だけに絞る(空白行は「すべて一致」と解釈される) |
| 想定より大きい値が返る | 空文字列("")がカウントされている | 空文字列は値扱いでカウント対象になる。真の空白セルのみスキップされる |
| 想定より大きい値が返る | 前方一致の仕様で意図しないレコードまで拾われている | ="=営業" のように完全一致記法を使う |
| 想定と違う列がカウントされる | フィールドの列番号を間違えている | 列番号ではなく見出し名(文字列)で指定するのがおすすめ |
| 条件が部分一致になる | 条件値にアスタリスクが含まれている | 完全一致にしたい場合は ="=営業部" のように先頭に = を付ける |
| 結果が更新されない | 条件範囲のセルが文字列扱いになっている | セルの書式を「自動」に戻すか、再入力する |
TIP
結果が0になるトラブルで最も多いのは「見出しの不一致」です。全角・半角やスペースの違いも不一致になります。条件範囲の見出しはデータベースからコピー&ペーストで作りましょう。コピーで作ったあとに見出しを編集してしまうのが2番目に多いミスなので、編集が必要なときはデータベース側を直してから条件範囲側にコピーし直します。
実務での落とし穴:データ追加で範囲が更新されない
最初は A1:D100 で範囲を切ってDCOUNTA関数を作ったけれど、データが101行目以降に増えてカウント漏れになる、というのは定番のミスです。対策は2つあります。
- 列指定で書く:
A1:Dと書けば最終行まで自動で含まれる - テーブル化(名前付き範囲): 「データ → 名前付き範囲」で
売上データのような名前を付け、=DCOUNTA(売上データ, "担当者", F1:F2)と書く
定型レポートを作るときは、最初から行が増えても困らない書き方にしておくのが安全です。
DCOUNTA関数のFAQ
Q. DCOUNTAとCOUNTAの違いは?
COUNTA関数は「条件なし」で空白以外のセルを数えます。DCOUNTA関数は「条件あり」で空白以外のセルを数えます。条件付きで絞り込みたいならDCOUNTA、全体を数えたいだけならCOUNTAでOKです。
Q. 条件を空欄にすると何が起きる?
条件範囲に見出しだけ書いて2行目を空欄にすると「条件なし」と解釈されます。つまりデータベース全体の空白以外セルがカウントされ、COUNTA関数と同じ結果になります。「条件をオン/オフ切り替えたい」ときの裏ワザとして使えます。
Q. ワイルドカードで「〜を含まない」は書ける?
DCOUNTA関数の条件範囲では <> と組み合わせて部分一致除外ができます。たとえば <>PC と書けば「PC を含まない」レコードだけ拾えます。ただしGoogleスプレッドシートのバージョンによって挙動が違うことがあるので、結果を必ず確認してください。
Q. 大文字・小文字は区別される?
DCOUNTA関数は大文字・小文字を区別しません。apple と APPLE は同じものとして扱われます。完全に区別したい場合は、EXACT関数とFILTER関数を組み合わせる方法に切り替えるのがおすすめです。
Q. ARRAYFORMULAと組み合わせられる?
DCOUNTA関数は1つのスカラー値を返す関数なので、ARRAYFORMULA とは相性が悪いです。複数の条件パターンを一気に集計したいときは、条件をテーブルにしてDCOUNTAを縦に並べて参照するか、QUERY関数やDCOUNT関数との組み合わせを検討してください。
Q. 関連するデータベース関数は?
代表的なものは以下です。条件範囲の作り方はすべて共通なので、まとめて覚えると応用が効きます。
まとめ
DCOUNTA関数は、データベース形式の表から条件に合う空白以外のセルの個数を数える関数です。
ポイントを整理します。
- 構文は
=DCOUNTA(データベース, フィールド, 条件)で、引数は3つ - 条件は数式内ではなくセル範囲(条件範囲)に書くのが特徴
- 空白以外のすべてのセル(数値・文字列・論理値)をカウントする
- DCOUNT関数は数値のみ、DCOUNTA関数は空白以外すべてが対象
- 同じ行に条件を横並びにすればAND条件、別の行にすればOR条件
- ワイルドカード(
*・?)や比較演算子(>・<・<>)で柔軟な条件指定ができる - 完全一致したいときは
="=営業"の特殊記法を使う - 条件セルの値を変えるだけで集計対象を切り替えられるので、ダッシュボード作りに最適
- 条件固定ならCOUNTIFS関数、条件を頻繁に変えるならDCOUNTA関数がおすすめ
- 結果が0になるときは見出しの不一致をまずチェック
まずは簡単な表で =DCOUNTA(A1:D7, "担当者", F1:F2) から試してみてください。慣れてきたら条件範囲をプルダウンと連動させて、毎月の集計を1クリックで切り替えるダッシュボードに育てていけますよ。
