「部署が”営業部”の売上だけ合計したい」「金額が一定額以上のレコードだけ集計したい」。こんなとき、いつもSUMIFやSUMIFSで頑張っていませんか。
条件を変えるたびに数式を書き直すのは、地味に面倒ですよね。条件が増えてくると数式も長くなり、あとから見たときに何の集計だったか分からなくなることもあります。
そんなときに便利なのが、ExcelのDSUM関数です。条件を別のセル範囲に書いておくだけで、該当するレコードの合計を自動で出してくれます。条件セルの値を書き換えれば集計結果も切り替わるので、簡易ダッシュボードのような使い方もできますよ。
この記事では、DSUM関数の構文から、条件範囲の作り方、AND/OR条件の応用、SUMIFSとの使い分け、よくあるエラーの対処法まで、実例付きで丁寧に解説します。
ExcelのDSUM関数とは?
DSUM関数(読み方: ディーサム)は、データベース形式の表から条件に合うレコードを探し、指定した列の合計を返す関数です。
名前は「Database SUM(データベースの合計)」の略で、ExcelのDで始まるデータベース関数(D関数)シリーズの代表選手です。同じ仲間にDAVERAGE(条件付き平均)やDCOUNT(条件付き個数)があります。
DSUM関数の特徴をまとめると、次のとおりです。
- 条件をセル範囲(条件範囲・クライテリア)で指定する独特のスタイル
- 条件範囲を書き換えるだけで集計条件をすぐ切り替えられる
- 複数条件(AND条件・OR条件)にも自然に対応
- 見出し付きのリスト形式のデータが前提
NOTE
DSUM関数はExcel 2003以降のすべてのバージョンで使えます。Microsoft 365、Excel 2021、Excel for Web、Mac版でも同じ動作です。
DSUM関数の書き方(構文と引数)
基本構文
=DSUM(database, field, criteria)
引数は3つで、すべて必須です。日本語Excelの数式バーには =DSUM(データベース, フィールド, 条件) と表示されます。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| database | 必須 | 見出し行を含むデータ範囲(例: A1:D100) |
| field | 必須 | 合計する列の見出し名(文字列)または列番号(数値) |
| criteria | 必須 | 条件を記述したセル範囲(見出し行+条件行) |
それぞれ、もう少し詳しく見ていきましょう。
database(第1引数)
databaseには、見出し行を含めたデータ範囲を指定します。先頭行に列の見出し(「部署」「商品名」「金額」など)が必ず入っている必要があります。
たとえば A1:D100 のように、A1セルが「部署」「日付」などの見出しになっている範囲を渡します。
field(第2引数)
合計したい列を指定します。指定方法は2つあります。
- 文字列で指定:
"金額"のように、データベースの見出しと同じ文字列をダブルクォーテーションで囲む - 数値で指定: データベースの左端列を1として、列の位置を数値で指定する(4列目なら
4)
文字列で指定するほうが、あとから見たとき何の列か分かりやすいのでおすすめです。
criteria(第3引数)
条件範囲には、見出し行と条件行を合わせた2行以上のセル範囲を指定します。これがDSUM関数の最大の特徴で、SUMIFSとの違いを生む部分でもあります。
条件範囲の作り方は次のセクションで詳しく説明しますね。
TIP
fieldに列番号を使う場合、database範囲の左端が1です。シートのA列が必ず1とは限らないので、列番号方式は意外とミスしやすいです。文字列指定のほうが安全ですよ。
DSUM関数の基本的な使い方
サンプルデータ
次のような売上データを使って説明します。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 部署 | 担当者 | 商品 | 金額 |
| 2 | 営業部 | 田中 | ノートPC | 150000 |
| 3 | 総務部 | 鈴木 | プリンター | 35000 |
| 4 | 営業部 | 佐藤 | モニター | 48000 |
| 5 | 経理部 | 高橋 | ノートPC | 150000 |
| 6 | 営業部 | 田中 | キーボード | 8000 |
| 7 | 総務部 | 伊藤 | モニター | 48000 |
このデータの「営業部の金額合計」をDSUM関数で求めてみます。
条件範囲の作り方
DSUM関数の条件は、別のセル範囲に書きます。ここがSUMIFやSUMIFSとの大きな違いです。
条件範囲は次のルールで作ります。
- 1行目に見出しを書く — データベースの見出しと完全に同じ文字列を使う
- 2行目以降に条件値を書く — 一致させたい値・比較式を入力する
たとえば「営業部」の金額合計を出したい場合、シートの空いているエリア(たとえばF1:F2)に次のように書きます。
| F | |
|---|---|
| 1 | 部署 |
| 2 | 営業部 |
そのうえで、DSUM関数の数式はこうなります。
=DSUM(A1:D7, "金額", F1:F2)
結果は 206000 です。営業部の3件(150000 + 48000 + 8000)が合計されます。
WARNING
条件範囲の見出しは、データベースの見出しと1文字でも違うとマッチしません。全角・半角・スペースの違いも認識されないので、データベースの見出しをコピー&ペーストして作るのが確実です。
比較演算子を使った条件
条件値は、文字列だけでなく比較演算子も使えます。
| 条件値の書き方 | 意味 |
|---|---|
営業部 | 「営業部」と完全一致 |
>=50000 | 50,000以上 |
<100000 | 100,000未満 |
<>営業部 | 「営業部」以外 |
たとえば「金額が50,000以上」のレコードだけ合計したい場合は、条件範囲をこう書きます。
| F | |
|---|---|
| 1 | 金額 |
| 2 | >=50000 |
=DSUM(A1:D7, "金額", F1:F2)
結果は 348000 です(150000 + 48000 + 150000 の3件の合計)。比較演算子をそのままセルに書くだけでOKというのが、DSUMのありがたいところです。
DSUM関数の応用|複数条件で合計する
ここからが本番です。DSUM関数の真価は、複数条件を扱うときに発揮されます。
AND条件(同じ行に並べる)
「営業部」かつ「金額が50,000以上」のように、複数の条件をすべて満たすレコードを合計したい場合です。
AND条件は、条件範囲の同じ行に複数列の条件を横に並べて書きます。
| F | G | |
|---|---|---|
| 1 | 部署 | 金額 |
| 2 | 営業部 | >=50000 |
=DSUM(A1:D7, "金額", F1:G2)
結果は 198000 です。営業部かつ50,000以上は、田中のノートPC(150000)と佐藤のモニター(48000)の2件だけなので、合計198,000円となります。
OR条件(別の行に書く)
「営業部」または「経理部」のように、いずれかの条件に合うレコードを合計したい場合です。
OR条件は、条件値を別の行に書くのがポイントです。
| F | |
|---|---|
| 1 | 部署 |
| 2 | 営業部 |
| 3 | 経理部 |
=DSUM(A1:D7, "金額", F1:F3)
結果は 356000 です。営業部3件の合計(206000)と経理部1件(150000)を足した値になります。
TIP
条件範囲のルールは「同じ行=AND、別の行=OR」と覚えておきましょう。これさえ押さえれば、複雑な条件もすっきり書けます。
AND条件とOR条件を組み合わせる
「営業部で金額50,000以上」または「総務部で金額50,000以上」のような複合条件です。
AND条件のセットを、OR条件のように複数行に並べます。
| F | G | |
|---|---|---|
| 1 | 部署 | 金額 |
| 2 | 営業部 | >=50000 |
| 3 | 総務部 | >=50000 |
=DSUM(A1:D7, "金額", F1:G3)
結果は 246000 です。営業部の50,000以上(150000 + 48000 = 198000)と、総務部の50,000以上(48000)の合計になります。
SUMIFSで同じことをしようとすると、=SUMIFS(...) + SUMIFS(...) のように2つの数式を足す必要があります。条件範囲で書けるDSUMのほうが、見た目もシンプルですね。
ワイルドカードを使った部分一致
条件値にはワイルドカード(* ?)も使えます。
*: 0文字以上の任意の文字列?: 任意の1文字
たとえば「商品名にモニターが含まれる」レコードを合計したい場合です。
| F | |
|---|---|
| 1 | 商品 |
| 2 | モニター |
=DSUM(A1:D7, "金額", F1:F2)
結果は 96000 です(佐藤と伊藤のモニター48000円×2件)。
NOTE
条件値に
*を使うと、デフォルトで部分一致として扱われます。完全一致にしたい場合は="=営業部"のように、先頭に=を付けた特殊記法を使ってください。
条件セルを書き換えて集計を即座に切り替える
DSUM関数の最大の強みは、条件をセルに書いているため、セルの値を書き換えるだけで集計結果が即座に変わる点です。
たとえば条件範囲のF2セルを「営業部」から「総務部」に書き換えるだけで、DSUM関数の結果が自動的に総務部の合計に切り替わります。数式を修正する必要はありません。
ここに「データの入力規則」でドロップダウンリストを設定しておけば、選択するだけで部署別・商品別の集計をサッと確認できる簡易ダッシュボードのできあがりです。
DSUM関数とSUMIF・SUMIFS関数の使い分け
Excelで条件付き合計といえば、SUMIF関数やSUMIFS関数もよく使われます。DSUMとどう使い分ければよいか、整理しておきましょう。
機能比較表
| 比較項目 | DSUM関数 | SUMIF関数 | SUMIFS関数 |
|---|---|---|---|
| 対応バージョン | Excel 2003以降 | Excel 2003以降 | Excel 2007以降 |
| 条件の指定場所 | 別セル範囲 | 引数内に直接 | 引数内に直接 |
| 複数AND条件 | ○(条件行を横並び) | ×(1条件のみ) | ○(引数を追加) |
| OR条件 | ○(条件行を縦並び) | ×(数式の足し算が必要) | ×(数式の足し算が必要) |
| 条件の切り替えやすさ | セル値の変更だけ | 数式の編集が必要 | 数式の編集が必要 |
| 数式の見やすさ | シンプル(引数3つ固定) | シンプル | 条件が多いと長くなる |
| 条件範囲のスペース | シート上に必要 | 不要 | 不要 |
| ワイルドカード | ○ | ○ | ○ |
使い分けの判断軸
実務では、次の3つの観点で選ぶとスムーズです。
- 条件を頻繁に切り替えるか
- はい → DSUM(セル変更だけで結果が変わる)
- いいえ → SUMIF / SUMIFS(数式内で完結)
- OR条件を含むか
- 含む → DSUM(条件行を追加するだけで自然に書ける)
- 含まない → SUMIFS(数式内で完結)
- シートに条件範囲を置くスペースがあるか
- ある → DSUM(可視化されてわかりやすい)
- ない → SUMIF / SUMIFS(数式内に閉じる)
ざっくりまとめると、定型レポートや簡易ダッシュボードはDSUM関数、単発の集計や条件固定のレポートはSUMIFS関数という使い分けが自然です。
DSUM関数とテーブル機能を組み合わせる
DSUM関数の弱点は、データを追加したときに数式の範囲を手動で広げないといけない点です。これは、Excelの「テーブル機能」と組み合わせると解決できます。
テーブルにする手順
- データ範囲(A1:D7)を選択
- 「挿入」タブ →「テーブル」をクリック
- 「先頭行をテーブルの見出しとして使用する」にチェックして「OK」
これでデータ範囲がテーブル化され、テーブル名(デフォルトでは テーブル1)が付きます。
テーブルをdatabase引数に指定する
DSUM関数のdatabase引数にテーブル名を直接指定できます。
=DSUM(テーブル1, "金額", F1:F2)
この書き方なら、テーブルにレコードを追加してもDSUMの集計範囲が自動拡張されるので、毎回数式を直す必要がありません。月次の売上データなど、行が増えていく表で特に便利です。
NOTE
テーブルの構造化参照(
テーブル1[金額]のような書き方)はcriteria引数では使えません。条件範囲は通常のセル範囲で指定してください。
D関数シリーズ早見表
DSUMの仲間であるD関数シリーズは、すべて同じ「データベース・フィールド・条件」の3引数構造を持ちます。一度DSUMを覚えれば、他のD関数もすぐ使えるようになります。
| 関数 | 機能 | 戻り値 | 詳細記事 |
|---|---|---|---|
| DSUM | 条件一致レコードの合計 | 数値 | この記事 |
| DAVERAGE | 条件一致レコードの平均 | 数値 | 2023-01-21-excel-function-howto-use-daverage |
| DCOUNT | 条件一致レコードのうち数値セルの個数 | 数値 | 2023-02-14-excel-function-howto-use-dcount |
| DCOUNTA | 条件一致レコードのうち空でないセルの個数 | 数値 | 2023-02-15-excel-function-howto-use-dcounta |
| DMAX | 条件一致レコードの最大値 | 数値 | 2023-05-09-excel-function-howto-use-dmax |
| DMIN | 条件一致レコードの最小値 | 数値 | 2023-05-11-excel-function-howto-use-dmin |
| DGET | 条件一致レコード(1件のみ)の値 | 値 | 2023-01-22-excel-function-howto-use-dget |
| DPRODUCT | 条件一致レコードの積 | 数値 | 2023-05-13-excel-function-howto-use-dproduct |
すべて引数構造が同じなので、DSUMで作った条件範囲をそのまま流用できます。「合計はDSUM、平均はDAVERAGE、件数はDCOUNT」と関数名だけ差し替えれば、同じ条件で多面的に集計できますよ。
よくあるエラーと対処法
DSUM関数で「思った結果にならない」ケースをまとめました。エラーが出たらまずここをチェックしてみてください。
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| 結果が常に0になる | 条件範囲の見出しがデータベースと不一致 | 見出しをコピー&ペーストで完全一致させる |
| 結果が0になる | 条件値の前後に余分なスペース | TRIM関数で除去するか、手入力し直す |
| 全角・半角の不一致で0になる | 条件値とデータの全角半角がずれている | JIS関数/ASC関数で揃える |
| #VALUE!エラー | fieldに存在しない見出し名を指定 | データベースの見出しと完全一致させる |
| 想定より大きい値が返る | 条件範囲に空白行が含まれている | 条件範囲を必要な行だけに絞る |
| 想定と違う列が合計される | fieldの列番号を間違えている | 文字列(見出し名)で指定するのがおすすめ |
| 条件が部分一致になる | 条件値に * が含まれている | ="=営業部" で完全一致化 |
WARNING
「結果が常に0」のトラブルでもっとも多いのは、条件範囲の見出しがデータベースと一致していないケースです。見た目は同じでも、全角スペースや末尾の空白が混ざっているだけでマッチしません。条件範囲の見出しは、必ずデータベースから直接コピー&ペーストして作りましょう。
TIP
条件範囲に空白行を含めると「すべてのレコードに一致」と解釈されてしまいます。これが「想定より大きい値」の原因です。F1:G3 と書くつもりが F1:G10 のように余計な空白行を含んだ範囲を指定していないか、確認してみてください。
まとめ
DSUM関数は、データベース形式の表から条件に合うレコードの合計を求めるデータベース関数です。
ポイントを整理します。
- 構文は
=DSUM(database, field, criteria)の3引数固定 - 条件は数式内ではなくセル範囲(条件範囲)に書くのが特徴
- 条件範囲は「見出し行+条件行」のセットで作る
- 同じ行に並べればAND条件、別の行に書けばOR条件
- 条件セルの値を変えるだけで集計対象を切り替えられる
- 条件固定の単発集計はSUMIFS、条件を頻繁に変える定型レポートはDSUMが向く
- テーブル機能と組み合わせれば、データ追加時の範囲拡張も自動化できる
- 結果が0になるときは、まず見出しの不一致を疑う
まずは小さな表で =DSUM(A1:D7, "金額", F1:F2) から試してみてください。条件セルを書き換えたときに結果が変わる瞬間に、DSUMの便利さを実感できるはずですよ。
スプレッドシート版の同関数についてはスプレッドシートのDSUM関数の使い方で解説しています。Excel関数の全体像を把握したい方はExcel関数の一覧もご覧ください。
