要点 —
DSUM(database, field, criteria)は1つの列を合計しますが、対象は 条件範囲——上端の行に列見出しを繰り返し、その下の行に条件を書き並べた小さな セルのブロック——に一致した行だけです。=DSUM(A1:E200, "Amount", H1:H2)は、H1:H2に置いたものに一致するすべての行の Amount を合計します。DCOUNTは同じ形 ですが、フィールド内の数値セルを数えます(文字列も数えるならDCOUNTA)。 この一族全体を貫くルールは2つ。database引数には見出し行を必ず含めること、 そして条件ブロックでは同じ行は AND、行を重ねると OR。No.1のバグは、データベースの 見出しと完全一致しない条件見出し——何にも一致せず、黙って 0 を返します。すべての Excel バージョンで動作します。
=DSUM(A1:E200, "Amount", H1:H2) ' H1:H2 の条件に一致する行の Amount を合計
=DCOUNT(A1:E200, "Amount", H1:H2) ' 一致した行のうち Amount が数値のものの件数
=DCOUNTA(A1:E200, "Rep", H1:H2) ' 一致した行のうち Rep が入力済みの件数(文字列でOK)
Excel で「条件付きの合計」を書く仕事は、いまやそのほとんどが SUMIFS で片づきます——条件は数式の中に直接打ち込みます。 D関数は同じ問いに別のやり方で答えますが、その違いこそが肝心です。条件を シート上の目に見える表として書き、数式にその場所を指し示させるのです。一見すると まどろっこしく思えますが、OR の分岐が3つあって、しきい値まで計算で決まるような問いに ぶつかった瞬間に効いてきます——レビューする人が読めるセルのブロックは、いちいち 解読しなければならない数式に勝ります。
この記事で学べること
- 考え方の軸:条件範囲は、グリッド上に書いたあなたのクエリ
- 3つの引数——そして
databaseに見出し行を含めなければならない理由 - 条件ブロックが AND(同じ行)と OR(行を重ねる)を表す仕組み
DCOUNTが文字列の列で 0 を返す理由、そしてDCOUNTAを使うべきとき- 「空の条件行はすべてに一致する」という小技——と落とし穴
- 判断:
DSUMがSUMIFSに勝つとき、勝たないとき
考え方の軸:クエリはシートの上に置く
どの D関数も、3つのものを読み取ります——データの表、数値を取り出したい列、そして 条件範囲です。最後のひとつは、Excel の他のどこにも登場しない発想です。条件を数式の 中に埋め込む代わりに、小さな表を作ります——データと一致する見出しの行を1つ、その下に 条件の行を1つ以上——そして、そのアドレスを関数に手渡します。
' データ(A1:E200)の見出し:Region | Product | Rep | Units | Amount
' 条件ブロック(H1:H2):
' H1: Region <- データからそのままコピーした見出し
' H2: West <- 条件
=DSUM(A1:E200, "Amount", H1:H2) ' -> Region が West の行の Amount を合計
一文として読んでみます——この表から、Amount 列を、H1:H2 の小さな表を満たす行について 合計する。この威力も、あらゆる落とし穴も、条件ブロックがコードではなくデータである ことから生まれます。編集できるし、何を尋ねたのかレビューする人が正確に見えるし、同じ ブロックに10本の異なる数式を向けることもできます。ただし、一致は見出しの文字列で とられるので、そこにタイプミスがあると黙って失敗します。
3つの引数——そして見出し行は必須
=DSUM(database, field, criteria)。実務ではこの3つすべてが必要で、最初のひとつで
さっそくつまずく人が続出します。
database— 見出し行を含めた表全体(A2:E200ではなくA1:E200)。見出しは 飾りではありません——fieldと条件ブロックが列を見つけるための手がかりです。2行目から 始めると#VALUE!になるか、黙って違う列を指します。field— どの列を集計するか。指定の仕方は3通りで、編集に強い順に並べると:
=DSUM(A1:E200, "Amount", H1:H2) ' 見出し文字列で(引用符つき)— 最も明快、列が動いても追随
=DSUM(A1:E200, E1, H1:H2) ' 見出しの入ったセルで — パラメータ化したレポート向き
=DSUM(A1:E200, 5, H1:H2) ' 列番号で(5列目)— もろい。列が動くと壊れる
criteria— 見出しと条件のブロックを収めた範囲(H1:H2)。データベースの外に 置きます——ふつうは数列ぶん右か、数行ぶん上あたりです。
引用符つきの見出し("Amount")を選びましょう。英語の文のように読め、誰かが列を挿入して
5番目のフィールドが6番目になっても動き続けます。
条件ブロック:横は AND、縦は OR
これは一族全体が共有するスキルなので、正確に押さえる価値があります。条件範囲は ミニ表です。上端の行が見出し、その下の各行が条件のまとまりです。同じ行にある条件は すべて真でなければならず(AND)、行を1つ増やすごとに、それは代わりの選択肢(OR)に なります。
' AND — 1行に:Region が West かつ Amount が 1000 超
' H1: Region I1: Amount
' H2: West I2: >1000
=DSUM(A1:E200, "Amount", H1:I2)
' OR — 行を重ねる:Region が West または Region が East
' H1: Region
' H2: West
' H3: East
=DSUM(A1:E200, "Amount", H1:H3)
条件範囲は、ブロックが使うすべての列と行を含むように広げます——OR の例なら H1:H3、
AND の例なら H1:I2 です。演算子(>、<、>=、<>)はそのまま文字列としてセルに
入れます:>1000、<>West。文字列の条件は大文字小文字を区別せず、既定では先頭から
一致します——North という条件は Northwest にも一致してしまいます。完全一致を強制する
には ="=North" と打ちます。ワイルドカードも使えます:Jo* は Jones と Johnson に一致
します。
このページで最もよくある失敗はこれです——条件の見出しは、データベースの見出しと
一字一句一致していなければなりません。Ammount、Region (末尾に空白)、あるいは
region と Region の食い違い——Excel は警告してくれません。ただ一致する行がなくなり、
0 を返すだけです。D関数が 0 や低すぎる合計を返したら、まず見出しのつづりを確かめて
ください。
DCOUNT は数値を数え、DCOUNTA はすべてを数える
DCOUNT と DCOUNTA は、COUNT/COUNTA の分かれ方を、そのまま条件範囲に移植した
ものです——そして、その違いはまったく同じように噛みついてきます。
=DCOUNT(A1:E200, "Amount", H1:H2) ' Amount が数値の行を数える — 例:34
=DCOUNT(A1:E200, "Rep", H1:H2) ' Rep の数値セルを数える -> 0(Rep は文字列!)
=DCOUNTA(A1:E200, "Rep", H1:H2) ' Rep が空でない行を数える -> 34
DCOUNT が数えるのは、指定したフィールドの中で数値を持つセルだけです。Rep のような
文字列の列に向けると、律儀に 0 を返します——エラーではなく、「一致なし」に見えるただの
ゼロです。中身に関係なく一致するレコードがいくつあるかを知りたいときは、常に値が入る
列に対して DCOUNTA を使うか、field 引数をまるごと省きます:=DCOUNT(A1:E200, , H1:H2)
は一致するすべての行を数えます。目安はこうです——数値を数える → DCOUNT、レコードを
数える → DCOUNTA。
「すべてに一致」:空の条件行
条件ブロックに見出しを置き、その下を空白のセルにすると、その条件はすべての行に一致 します。D関数で列を丸ごと合計するときのやり方であり、値を打ち込んだり消したりして オン・オフを切り替える条件ブロックにも、ときどき重宝します。
' H1: Region
' H2: <- 空白:制限なし
=DSUM(A1:E200, "Amount", H1:H2) ' -> 全地域を含めた Amount の総計
落とし穴はその裏側です——複数行の OR ブロックの中にうっかり空白の行が混じると、
その空行がすべての行に一致するため、クエリ全体が「すべて」に広がってしまいます。一部だけ
のはずの DSUM が突然、総計を返したら、条件範囲に紛れ込んだ空の条件行を探しましょう。
判断:DSUM か SUMIFS か
たいていの条件付き合計では、SUMIFS が正しい既定です——
コンパクトで、持ち運びやすく、シート上に補助ブロックも要りません。では DSUM の方が
良い道具になるのはいつでしょう。問いそのものが、目に見えて編集できる状態であるべき
ときです。
- 複雑な OR ロジック。
SUMIFSに OR は標準搭載されておらず、SUM({…})の中に 積むか、数式を足すことになります。DSUMは行を1つ足すだけで OR になり——ひと目で 読めます。 - 利用者が変えていく問い。 条件ブロックは小さなコントロールパネルです。数式を触ら
なくても、数式が苦手な同僚が
WestをEastに、>1000を>5000に書き換えられ ます。 - 数式ベースの条件。
DSUMは=E2>AVERAGE(E:E)のような条件——「平均を上回る 注文」——をその場で計算して受け付けます。(詳しくは データベース関数のガイドで。) - 監査のしやすさ。 財務モデルでは、目に見える条件表がそのままドキュメントに なります。レビューする人は、入れ子の数式ではなく問いそのものを読みます。
SUMIFS は、日々の「この条件付き合計を、このセルに」という用途や、列に沿ってコピー
していくものに残しましょう。条件がシート上に置かれるに値するとき——そして
DGET だけが提供するちょうど1レコードの抽出が必要な
とき——には DSUM に手を伸ばします。
ExcelMaster の使いどころ
D関数の面倒は、DSUM そのものにはありません——条件ブロックを正しく組むところにあり
ます:データと一致する見出し、AND は1行に、OR は行を重ねて、そのすべてを覆うように
サイズを合わせた範囲。ExcelMaster に「West または East で 1,000 を超える注文の
Amount を合計して」と伝えれば、条件表をレイアウトし、見出しをあなたのデータに合わせて
つづり、それを指す =DSUM(...) を書きます。頑として 0 を返す DSUM を貼り付ければ、
おなじみの容疑者——見出しのタイプミス——を確かめて直します。
よくある質問
DSUM と SUMIFS の違いは?
どちらも列を条件付きで合計します。SUMIFS は条件を数式の中の引数として受け取りますが、
DSUM はシート上の条件範囲——見出しセルと条件セルのブロック——から読み取ります。
DSUM は OR ロジックや数式ベースの条件をより読みやすく扱え、問いをレビューできる形で
見せ続けます。SUMIFS の方がコンパクトで持ち運びやすい。既定では SUMIFS を、条件を
グリッド上で編集できるようにしたいときは DSUM を使いましょう。
DSUM が 0 を返すのはなぜ?
ほぼ確実に、条件の見出しとデータベースの見出しの食い違いです。両者は同一でなければ
なりません——つづりが同じで、末尾に空白もないこと。あわせて、database 引数が
見出し行を含んでいるか(A2:E200 ではなく A1:E200)、条件範囲がすべての条件セルを
覆っているかも確認します。なお、空白の条件セルは逆に、何にも一致しないのではなく
すべてに一致します。
DCOUNT と DCOUNTA の違いは?
DCOUNT は、指定したフィールドの中で数値を含むセルを数えます。DCOUNTA は文字列も
含めて空でないセルを数えます。DCOUNT を文字列の列に向けると 0 を返します。中身に
関係なく条件に一致するレコード数を数えたいときは、値の入った列に対して DCOUNTA を
使うか、field 引数を省きます。
D関数で OR 条件を書くには?
それぞれの選択肢を、条件範囲の別々の行に置きます。「Region が West または East」なら、
見出し Region を1つのセルに、その真下の2つのセルに West と East を置き、3行すべてを
含むように条件範囲のサイズを合わせます(例:H1:H3)。逆に、同じ行の条件は AND で
結ばれます。
DSUM や DCOUNT は古いバージョンの Excel で使える?
使えます。データベース関数は初期のバージョンから Excel に組み込まれており、Excel 2016、
2019、2021、365 で同じように動きます——GROUPBY のような新しい関数にある #NAME? の
リスクはありません。Excel の中でも最も古く、最も安定した一角のひとつです。
検証環境
検証環境: Excel 365(Windows 11)— 最終確認 2026-07-20。
関連ガイド: ExcelのDGET関数 · Excelのデータベース関数 · ExcelのSUMIFS関数 · ExcelのCOUNTIFS関数 · ExcelのFILTER関数
