「SUMIF関数はよく使うけど、DSUM・DCOUNT・DAVERAGEって何が違うの?」という疑問を持つ方は多いでしょう。どちらも条件付き集計ができる関数ですが、Excelのデータベース関数(D関数)は「条件範囲」をセルに書き出すという独特のアプローチを取ります。条件をセルで管理できるため、条件の切り替えや複雑なOR条件も直感的に扱えるのが特徴です。
本記事では、DSUM・DCOUNT・DCOUNTA・DAVERAGE・DMAX・DMIN・DGETの7つのデータベース関数を体系的に解説します。条件範囲の設計手順・AND条件とOR条件の書き方・SUMIF/SUMIFSとの使い分け・実務で使える想定例・MOS試験での位置づけを網羅します。
Excelデータベース関数(D関数)とは
ExcelのD関数は、データベース形式(先頭行にヘッダー行を持つリスト)を対象に、条件範囲で指定した条件を満たすレコードだけを集計する関数群です。関数名の先頭に「D」が付くことからD関数と呼ばれています。
| 関数名 | 動作 | SUMIF系の対応関数 |
|---|---|---|
| DSUM | 条件を満たすフィールドの合計を返す | SUMIF・SUMIFS |
| DCOUNT | 条件を満たすフィールドの数値セルの個数を返す | COUNTIF・COUNTIFS |
| DCOUNTA | 条件を満たすフィールドの空白以外のセルの個数を返す | COUNTIF・COUNTIFS |
| DAVERAGE | 条件を満たすフィールドの平均を返す | AVERAGEIF・AVERAGEIFS |
| DMAX | 条件を満たすフィールドの最大値を返す | MAXIFS |
| DMIN | 条件を満たすフィールドの最小値を返す | MINIFS |
| DGET | 条件を満たす唯一のレコードから値を返す | (対応なし) |
D関数の3つの引数は共通です。
=DSUM(database, field, criteria)
=DCOUNT(database, field, criteria)
=DAVERAGE(database, field, criteria)
| 引数 | 説明 | 指定例 |
|---|---|---|
| database | ヘッダー行を含むデータベース全体の範囲 | A1:E100 |
| field | 集計対象のフィールド名(ヘッダー文字列)またはフィールド番号(1~) | “売上金額” または 4 |
| criteria | 条件範囲(ヘッダー行+条件値の範囲) | G1:H2 |
D関数の理解で最も重要なのがconditions(criteria引数)の設計です。この「条件範囲」の概念を把握すれば、D関数のすべてが分かります。
条件範囲(criteria)の設計方法
条件範囲とは、ヘッダー行(フィールド名)と条件値を組み合わせたセル範囲です。DSUM・DCOUNT・DAVERAGEはすべてこの条件範囲を参照します。
条件範囲の基本構造
条件範囲には2つのルールがあります。
- 1行目にフィールド名(ヘッダー)を書く:データベースのヘッダー行と完全に一致する文字列を使う。コピー&ペーストが確実
- 2行目以降に条件値を書く:テキスト・数値・比較演算子(”>100″など)・ワイルドカード(”東*”など)が使用できる
(想定例)次のようなデータベースがA列からD列にある場合を考えます。
| A列: 商品名 | B列: カテゴリ | C列: 担当者 | D列: 売上金額 |
|---|---|---|---|
| 商品A | 家電 | 山田 | 50000 |
| 商品B | 食品 | 田中 | 15000 |
| 商品C | 家電 | 鈴木 | 80000 |
| 商品D | 衣料 | 山田 | 30000 |
F列に条件範囲を設置し、「カテゴリ=家電」の売上合計をDSUMで求めます。
| F列: カテゴリ |
|---|
| 家電 |
=DSUM(A1:D5, "売上金額", F1:F2)
結果は「130000」(商品Aの50000+商品Cの80000)となります。条件範囲F1(ヘッダー”カテゴリ”):F2(値”家電”)がcriteria引数です。
AND条件:同じ行に複数の条件を書く
「カテゴリ=家電」かつ「担当者=山田」のようにAND条件にしたい場合、条件範囲の同じ行に複数の列を並べます。
| F列: カテゴリ | G列: 担当者 |
|---|---|
| 家電 | 山田 |
=DSUM(A1:D5, "売上金額", F1:G2)
これで「カテゴリが家電 AND 担当者が山田」のレコードだけを合計します(上の想定例では商品Aの50000のみ)。
OR条件:複数の行に条件を書く
「カテゴリ=家電」または「カテゴリ=衣料」のようにOR条件にしたい場合、条件を異なる行に書きます。
| F列: カテゴリ |
|---|
| 家電 |
| 衣料 |
=DSUM(A1:D5, "売上金額", F1:F3)
条件範囲をF1:F3(ヘッダー+2行の条件)に広げます。「家電 OR 衣料」のどちらかを満たすレコードを合計します。
比較演算子とワイルドカード
条件範囲の値には比較演算子やワイルドカードも使えます。
| 条件の書き方 | 意味 | 例 |
|---|---|---|
| “>=50000” | 50000以上 | 売上金額が50000以上 |
| “<30000” | 30000未満 | 売上金額が30000未満 |
| “東*” | 「東」で始まる文字列 | 東京・東大阪など |
| “*電機*” | 「電機」を含む文字列 | ○○電機製造など |
| “<>山田” | 「山田」以外 | 山田以外の担当者 |
条件範囲に「>=50000」と文字列として書くのがポイントです(セルの書式は文字列でも数値でも動作します)。
DSUM関数の詳細と活用
DSUMは条件を満たすレコードのフィールド値の合計を返します。field引数にはフィールド名の文字列かフィールド番号(左から数えた列番号)を指定します。
=DSUM(A1:D100, "売上金額", F1:G2) ' フィールド名を文字列で指定
=DSUM(A1:D100, 4, F1:G2) ' 4列目(D列)を番号で指定
フィールド名の指定では大文字・小文字は区別されませんが、スペースや表記揺れには注意が必要です。ヘッダー行のセルをそのままコピーして条件範囲に貼り付けると確実です。
(想定例)月次売上データで「地域=関東」かつ「売上金額が100000以上」の合計を求めるケースでは、条件範囲に「地域」「売上金額」の2列を並べ、それぞれに「関東」「>=100000」と入力します。F2セルの値を変更するだけで対象地域を切り替えられるため、レポート用のシートに条件セルを設けておく使い方が一般的です。
DCOUNT・DCOUNTA関数
DCOUNTとDCOUNTAは条件を満たすレコードの件数を返します。
| 関数 | カウント対象 | 用途 |
|---|---|---|
| DCOUNT | 数値が入力されているセルのみ | 数値データの件数を数える(未入力・文字列はカウントしない) |
| DCOUNTA | 空白以外のすべてのセル | テキスト・数値・数式の結果を問わず件数を数える |
=DCOUNT(A1:D100, "売上金額", F1:F2) ' 条件を満たす数値セルの個数
=DCOUNTA(A1:D100, "商品名", F1:F2) ' 条件を満たす空白以外セルの個数
「商品名が入力されていれば1件とカウントしたい」場合はDCOUNTA、「数値の売上金額が存在する件数を数えたい」場合はDCOUNTと使い分けます。field引数を空文字列""にするとデータベース全体の行数をカウントできます(DCOUNT の場合は数値フィールドが必要なため注意)。
DAVERAGE関数
DAVERAGEは条件を満たすレコードのフィールド値の平均を返します。構文はDSUMと同じです。
=DAVERAGE(A1:D100, "売上金額", F1:F2)
(想定例)商品カテゴリ別の平均単価を比較する集計表を作る場合、条件範囲のカテゴリセルを「家電」「食品」「衣料」と行ごとに並べ、各行にDAVERAGEを配置します。条件セルをドロップダウンリスト(データの入力規則)と組み合わせると、選択したカテゴリの平均単価が即座に更新されるインタラクティブなレポートになります。
DMAX・DMIN関数
DMAXは条件を満たすレコードの最大値、DMINは最小値を返します。どちらも構文はDSUMと同じです。
=DMAX(A1:D100, "売上金額", F1:F2) ' 条件を満たすレコードの最大売上
=DMIN(A1:D100, "売上金額", F1:F2) ' 条件を満たすレコードの最小売上
MAXIFS・MINIFSが使えるExcel 2019・Microsoft 365以降では、MAXIFS・MINIFSのほうが条件を数式内に直接書けるため簡潔になります。DMAXとDMINは旧バージョンのExcelでの互換性確保や条件範囲を多用するシートの統一感のために使います。
DGET関数:唯一のレコードから値を取り出す
DGETは条件を満たす唯一のレコードのフィールド値を返す特殊なD関数です。
=DGET(A1:D100, "商品名", F1:G2)
DGETは条件を満たすレコードが1件のときのみ正しく動作します。0件のときは#VALUE!、2件以上のときは#NUM!エラーが返ります。このためDGETを使う場合は、必ず「一意に特定できる条件」(コードや番号など)を条件範囲に指定します。複数件ヒットする可能性がある場合はXLOOKUPやINDEX/MATCHのほうが適切です。
実務活用パターン(想定例)
パターン1:条件セルを切り替えるフォーム型集計
(想定例)集計シートにドロップダウンリストで「地域」「担当者」「期間(月)」を選べるセルを設置し、それらを条件範囲として参照します。D関数の式はシートに1箇所だけ書き、条件セルの値を変えるだけで集計結果が自動更新されるシートが作れます。SUMIF/SUMIFSでは条件を数式内に直接書くため、条件変更のたびに数式を修正する必要があります。D関数は「条件をセルで管理する」という設計思想が合う場面で威力を発揮します。
パターン2:OR条件をそのままセルに書き出す
(想定例)「関東または関西の売上合計」「A社またはB社の取引件数」のようなOR集計では、SUMIFS関数はSUMIFS(…)+SUMIFS(…)と2つの数式を足す必要がありますが、D関数では条件範囲に行を追加するだけです。条件の数が増えるほどD関数の条件範囲アプローチが読みやすくなります。
パターン3:ワイルドカードで部分一致集計
(想定例)顧客名に「東京」を含むレコードだけを集計したい場合、条件範囲の顧客名セルに「*東京*」と入力します。DSUMの条件範囲ではワイルドカードがそのまま使えるため、前方一致(”東*”)・後方一致(”*電機”)・部分一致(”*東京*”)を直感的に設定できます。
SUMIF/SUMIFS・COUNTIF/COUNTIFSとの使い分け
D関数とSUMIF/SUMIFS・COUNTIF/COUNTIFSは集計できる内容はほぼ同じですが、設計思想が異なります。
| 観点 | D関数 | SUMIF/SUMIFS・COUNTIF/COUNTIFS |
|---|---|---|
| 条件の書き場所 | シート上の「条件範囲」セルに書く | 数式の引数の中に直接書く |
| OR条件 | 条件範囲に行を追加するだけ | 複数のSUMIFSを足し算する必要がある |
| 条件の動的変更 | 条件セルの値を変えるだけ | 数式を編集する必要がある |
| 数式の可読性 | 引数が短くシンプル | 条件が多いと引数が長くなる |
| フィルターとの併用 | フィルター中でも全データから集計する | 同上(SUBTOTALと組み合わせ不要) |
| 多くの人が知っている | D関数はやや知名度が低い | SUMIF/COUNTIFは広く知られている |
一般的にはSUMIF/SUMIFSのほうが普及しており、シンプルな条件集計には適しています。D関数は「条件を頻繁に切り替えたい」「OR条件が多い」「条件をシートの可視セルで管理したい」場合に選ぶと効果的です。
よくあるミスとエラーの対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
| 結果が0になる | 条件範囲のヘッダーがデータベースのヘッダーと一致していない(スペース・全角半角の違いなど) | データベースのヘッダーセルをそのままコピーして条件範囲に貼り付ける |
| 結果が0になる(数値条件) | 比較演算子を含む条件(”>=100″)が数値として入力されている | 条件セルの書式を「文字列」にするか、数式バーで直接入力して文字列として確認する |
| #VALUE!エラー(DGET) | 条件を満たすレコードが0件 | 条件が正しいか確認する。条件がヒットしない場合のための代替値をIFERRORで設定する |
| #NUM!エラー(DGET) | 条件を満たすレコードが2件以上 | 条件範囲に追加の絞り込み条件を加えて一意にする |
| 条件範囲の空行 | 条件範囲にヘッダーだけで値行が空の場合、全レコードが対象になる | 条件範囲は必ず1行以上の条件値を含む範囲を指定する。ヘッダー行のみを範囲に含めると全件合計になる |
条件範囲に空行を含めると全件が対象になる
D関数の仕様として、条件値の行が空白の場合はすべてのレコードが対象になります。条件範囲をF1:F3に設定してもF2:F3が両方空なら全件が集計されます。動的に条件範囲を広げたい場合は、条件値が入っていない行を範囲に含めないよう注意が必要です。
MOS試験での位置づけ
ExcelのD関数は、MOS Excel 365の「数式や関数を使用した演算の実行」の範囲に含まれます。分野別の出題数・配点は公表されていません。
試験対策として押さえておきたいポイントは次の通りです。
- 3つの引数の役割:database(ヘッダー含む範囲)・field(フィールド名または番号)・criteria(条件範囲)の意味と入力順を正確に覚える
- 条件範囲の構造:1行目がヘッダー・2行目以降が条件値というルールを守る。ヘッダーはデータベースのヘッダーと完全一致させる
- AND条件とOR条件の書き方:AND条件は同じ行に複数列・OR条件は複数行に書くという基本ルールを手を動かして確認する
- DCOUNT vs DCOUNTA:数値セルのみカウントするDCOUNTと空白以外をカウントするDCOUNTAの違いを明確にする
- DGETのエラー条件:#VALUE!(0件)と#NUM!(複数件)のエラーが返る条件を理解する
MOS試験の学習時間の目安は、アソシエイト(MO-210)で初学者の方は40~60時間、業務でExcelを使い慣れている方は20~30時間が目安です。D関数を含む関数分野は繰り返し入力練習することで定着度が上がります。
MOS試験 D関数チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| DSUMの基本入力 | =DSUM(database, “フィールド名”, criteria)を正確に入力できる | ★☆☆ |
| 条件範囲の設定 | データベースのヘッダーをコピーして条件範囲を作成できる | ★☆☆ |
| AND条件の設定 | 同じ行に複数の条件を並べてAND集計できる | ★★☆ |
| OR条件の設定 | 複数行に条件を並べてOR集計できる | ★★☆ |
| 比較演算子の使用 | 条件セルに”>=100″などの文字列を入力して集計できる | ★★☆ |
| DCOUNTとDCOUNTAの使い分け | 数値カウントと非空白カウントを状況に応じて選択できる | ★★☆ |
| IFERRORとDGETの組み合わせ | DGETのエラー時に代替テキストを返す数式を作成できる | ★★★ |
PR
DSUM・DCOUNT・DAVERAGEを含むExcel全関数を図解で丁寧に解説。データベース関数の条件範囲の設計方法も実例付きで学べる、関数を体系的に習得したい方に最適な一冊です。
まとめ:D関数は「条件範囲」をセルで管理するための集計関数
本記事のポイントをまとめます。
- D関数の共通構文:=D関数名(database, field, criteria)の3引数。databaseはヘッダー行含む全範囲、fieldは集計対象のフィールド名または番号、criteriaは条件範囲
- 条件範囲の設計が核心:1行目にフィールド名(ヘッダーと完全一致)、2行目以降に条件値を書く。ヘッダーはコピー&ペーストが確実
- AND条件は同じ行・OR条件は別の行:この2ルールを守れば複雑な条件も直感的に管理できる
- DSUM/DCOUNT/DAVERAGEの選択:合計にはDSUM、件数にはDCOUNT/DCOUNTA、平均にはDAVERAGEを使う
- DCOUNTとDCOUNTAの違い:数値セルのみカウントするDCOUNT、空白以外すべてをカウントするDCOUNTA
- DGETはエラーに注意:0件で#VALUE!、複数件で#NUM!が返るため、IFERRORと組み合わせて安全に使う
- SUMIF/SUMIFSとの使い分け:条件を頻繁に切り替えたい・OR条件が多い場合はD関数、シンプルな条件ならSUMIF/SUMIFSが読みやすい
D関数はSUMIF系関数と比べると知名度は低いですが、「条件をセルで可視化して管理する」という設計が合う場面では非常に強力です。条件範囲をドロップダウンリストと組み合わせたフォーム型集計シートは、業務報告書や定型集計の自動化に役立ちます。MOS試験対策としては、3つの引数の意味と条件範囲の基本ルールを手を動かして確認することが、最も効果的な学習方法です。
