「該当する商品の単価だけを掛け合わせた指数を出したい」「条件に合う利率をまとめて複利計算したい」。こんな場面、フィルタで絞り込んでからPRODUCT関数を使っていませんか。
条件が変わるたびにフィルタをかけ直すのは面倒ですよね。しかもフィルタ操作は元のデータ表示を変えてしまうので、共有シートだと他の人の作業にも影響します。
そんなときに便利なのがDPRODUCT関数です。条件を別のセル範囲に書いておくだけで、該当するデータの積(掛け算の結果)を自動で返してくれます。この記事では、スプレッドシートのDPRODUCT関数の基本から複数条件・OR条件の応用、PRODUCT関数やSUMPRODUCT関数との使い分けまでまとめて紹介します。
スプレッドシートのDPRODUCT関数とは?
DPRODUCT関数(読み方: ディープロダクト)は、データベース形式の表から条件に合うレコードを探し、指定した列の値をすべて掛け合わせた積を返す関数です。
名前は「Database PRODUCT(データベースの積)」の略です。DSUM(条件付き合計)やDAVERAGE(条件付き平均)と同じ「データベース関数」の仲間になります。足し算ではなく掛け算を行うのがDPRODUCT関数の特徴です。
DPRODUCT関数の特徴をまとめると、次のとおりです。
- 条件をセル範囲(条件範囲)で指定するスタイル
- 条件範囲を書き換えるだけで集計条件をすぐ切り替えられる
- 複数条件(AND条件・OR条件)にも対応
- 見出し付きのリスト形式のデータが前提
- 対象セルに0があると結果も0になる(積の性質上)
NOTE
DPRODUCT関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同じ関数があるので、ファイルのやり取りでも安心です。
PRODUCT関数との違い(全体の積 vs 条件付きの積)
DPRODUCT関数とPRODUCT関数の最大の違いは「条件を付けられるかどうか」です。
| 比較項目 | PRODUCT関数 | DPRODUCT関数 |
|---|---|---|
| 条件指定 | できない(範囲全体が対象) | できる(条件範囲で絞り込み) |
| 構文 | =PRODUCT(範囲) | =DPRODUCT(データベース, フィールド, 条件) |
| 用途 | シンプルに値を全部掛ける | 特定の条件に合うデータだけの積 |
たとえば「範囲内の値を全部掛ける」ならPRODUCT関数で十分です。「営業部の担当レコードだけ掛け合わせたい」のように条件を付けたいなら、DPRODUCT関数の出番になります。
DPRODUCT関数の書き方(構文と引数)
基本構文
=DPRODUCT(データベース, フィールド, 条件)
引数は3つです。すべて必須で、省略はできません。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| データベース | 必須 | 見出し行を含むデータ範囲(例: A1:D100) |
| フィールド | 必須 | 積を求める列の見出し名(文字列)または列番号(数値) |
| 条件 | 必須 | 条件を記述したセル範囲(見出し行+条件行) |
それぞれ詳しく見ていきましょう。
データベース(第1引数)
データベースには、見出し行を含めたデータ範囲を指定します。先頭行に列の見出し(「部署」「商品名」「係数」など)が入っている必要があります。
フィールド(第2引数)
積を求めたい列を指定します。指定方法は2つあります。
- 文字列で指定:
"係数"のように、見出しと同じ文字列をダブルクォーテーションで囲む - 数値で指定: データベースの左端列を1として、列の位置を数値で指定する(4列目なら
4)
文字列で指定するほうが、あとから見たとき何の列かわかりやすいのでおすすめです。
条件(第3引数)
条件範囲には、見出し行と条件行の2行以上のセル範囲を指定します。これがDPRODUCT関数の最大の特徴です。
条件範囲の作り方は次のセクションで詳しく説明しますね。
TIP
フィールドに列番号を使う場合、データベース範囲の左端が1です。シートのA列が1とは限らないので注意してください。
DPRODUCT関数の基本的な使い方
サンプルデータ
次のような利率データを使って説明します。年ごとの利率(成長率)を表にしたものです。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 年 | 区分 | 担当 | 成長率 |
| 2 | 2021 | 営業部 | 田中 | 1.05 |
| 3 | 2022 | 営業部 | 田中 | 1.08 |
| 4 | 2023 | 総務部 | 鈴木 | 1.03 |
| 5 | 2023 | 営業部 | 佐藤 | 1.10 |
| 6 | 2024 | 営業部 | 田中 | 1.04 |
| 7 | 2024 | 総務部 | 伊藤 | 1.02 |
条件範囲の設定方法
DPRODUCT関数の条件は、別のセル範囲に書きます。ここがPRODUCT関数との大きな違いです。
条件範囲は次のルールで作ります。
- 1行目に見出しを書く — データベースの見出しと完全に同じ文字列を使う
- 2行目に条件値を書く — 一致させたい値を入力する
たとえば「営業部」の成長率をすべて掛け合わせたい場合、シートの空いているエリア(たとえばF1:F2)に次のように書きます。
| F | |
|---|---|
| 1 | 区分 |
| 2 | 営業部 |
数式はこうなります。
=DPRODUCT(A1:D7, "成長率", F1:F2)
結果は 1.05 × 1.08 × 1.10 × 1.04 = 約1.296 です。営業部の4件の成長率を掛け合わせた複利の成長が一発で求められます。
TIP
条件範囲の見出しは、データベースの見出しと1文字でも違うとエラーになります。コピー&ペーストで作ると確実ですよ。
比較演算子を使った条件
条件値には比較演算子も使えます。
| 条件値の書き方 | 意味 |
|---|---|
営業部 | 「営業部」と完全一致 |
>=2023 | 2023以上 |
<2024 | 2024未満 |
<>営業部 | 「営業部」以外 |
たとえば「年が2023以上」のレコードの成長率をすべて掛け合わせたい場合は、条件範囲をこう書きます。
| F | |
|---|---|
| 1 | 年 |
| 2 | >=2023 |
=DPRODUCT(A1:D7, "成長率", F1:F2)
結果は 1.03 × 1.10 × 1.04 × 1.02 = 約1.202 です。2023年以降の4件の成長率の積が返ります。
DPRODUCT関数の実践的な使い方・応用例
複数条件(AND条件)で積を求める
「営業部」かつ「2023年以降」のように、複数の条件をすべて満たすレコードから積を求めたい場合です。
AND条件は、条件範囲の同じ行に複数の見出し・条件値を横に並べて書きます。
| F | G | |
|---|---|---|
| 1 | 区分 | 年 |
| 2 | 営業部 | >=2023 |
=DPRODUCT(A1:D7, "成長率", F1:G2)
結果は 1.10 × 1.04 = 1.144 です。営業部で2023年以降のレコードは佐藤(1.10)と田中(1.04)の2件で、その積が返ります。
OR条件で積を求める
「営業部」または「総務部」のように、どちらかの条件に合うレコードから積を求めたい場合です。
OR条件は、条件値を別の行に書くのがポイントです。
| F | |
|---|---|
| 1 | 区分 |
| 2 | 営業部 |
| 3 | 総務部 |
=DPRODUCT(A1:D7, "成長率", F1:F3)
結果は 1.05 × 1.08 × 1.03 × 1.10 × 1.04 × 1.02 = 約1.376 です。営業部と総務部のすべてのレコード6件分の成長率が掛け合わされます。
同じ行に書くとAND条件、別の行に書くとOR条件。このルールを覚えておきましょう。
担当者ごとに複利成長率を求める
同じ条件範囲の担当セルだけを書き換えれば、担当者ごとの複利成長率をサッと比較できます。
| F | |
|---|---|
| 1 | 担当 |
| 2 | 田中 |
=DPRODUCT(A1:D7, "成長率", F1:F2)
田中の成長率3件(1.05、1.08、1.04)を掛け合わせて 約1.179 が返ります。F2セルを「佐藤」に書き換えれば、そのまま佐藤の成長率1.10が返り、鈴木なら1.03が返ります。担当ごとのパフォーマンスを素早く確認できますよ。
指数の組み合わせ計算に使う
商品ごとの「数量」や「割引係数」「税率」などを1行ごとに持つ表があるとき、条件に合う行の係数をまとめて掛け合わせたいケースで活躍します。
たとえば次のような表があるとします。
| A | B | C | |
|---|---|---|---|
| 1 | 商品 | 種別 | 係数 |
| 2 | 商品A | 割引 | 0.9 |
| 3 | 商品A | 税 | 1.1 |
| 4 | 商品A | 為替 | 1.05 |
| 5 | 商品B | 割引 | 0.8 |
「商品A」の係数をすべて掛け合わせた最終調整率を求める場合です。
=DPRODUCT(A1:C5, "係数", E1:E2)
条件範囲(E1:E2)には「商品」「商品A」と入れておきます。結果は 0.9 × 1.1 × 1.05 = 約1.0395 で、商品Aの最終的な調整率が一発で求まります。
条件範囲を切り替えて集計を素早く変える
DPRODUCT関数の大きな強みは、条件をセルに書いているため、セルの値を書き換えるだけで集計結果が即座に変わる点です。
たとえば条件範囲のF2セルを「営業部」から「総務部」に書き換えるだけで、DPRODUCT関数の結果が自動的に総務部の積に切り替わります。数式を修正する必要はありません。
ドロップダウンリスト(データの入力規則)と組み合わせると、選択するだけで区分別の複利成長をサッと確認できる簡易ダッシュボードが作れますよ。
DPRODUCT関数とSUMPRODUCT関数の使い分け
条件付きで「掛け算を含む集計」をしたいとき、SUMPRODUCT関数も候補に挙がります。名前は似ていますが、計算する内容は大きく違います。
| 比較項目 | DPRODUCT関数 | SUMPRODUCT関数 |
|---|---|---|
| 計算内容 | 1列の値をすべて掛け合わせた積 | 複数列の「行ごとの積」の合計 |
| 用途 | 複利計算・係数の連続乗算 | 単価×数量の合計・加重平均 |
| 条件指定 | 条件範囲(別セル) | 配列式で条件を掛ける |
| 構文 | =DPRODUCT(DB, フィールド, 条件) | =SUMPRODUCT(範囲1, 範囲2, ...) |
使い分けのポイント:
- 1列の値をまとめて掛けたい(複利・指数) → DPRODUCT関数
- 行ごとに掛けてから合計したい(単価×数量の総額) → SUMPRODUCT関数
- 条件をセルで切り替えたい → DPRODUCT関数
- 数式の中で条件を完結させたい → SUMPRODUCT関数
実務ではまったく違う場面で使う関数なので、「縦方向に掛け算を続けるならDPRODUCT」「横方向に掛けて縦方向に合計するならSUMPRODUCT」と覚えておくとスムーズです。
よくあるエラーと対処法
DPRODUCT関数で「思った結果にならない」ケースをまとめました。
| 症状 | 原因 | 対処法 |
|---|---|---|
| 結果が0になる | 対象データに0が含まれている(積なので1つでも0があると0になる) | 0が含まれない条件に絞るか、IF関数で0を除外する |
| 結果が1になる | 条件に一致するレコードが0件だった | 条件範囲の見出し・条件値を見直す。空白セルは1として扱われる |
| 結果が1になる | 条件範囲の見出しがデータベースの見出しと一致していない | 見出しをコピー&ペーストして完全一致させる |
| 結果が想定より大きくなる | 条件範囲に空白行が含まれている | 条件範囲を必要な行だけに絞る(空白行は「すべて一致」と解釈される) |
| #VALUE! エラー | フィールドに存在しない列名を指定している | データベースの見出しと同じ文字列を使う |
| 想定と違う列の積が返る | フィールドの列番号を間違えている | 列番号ではなく見出し名(文字列)で指定するのがおすすめ |
| 条件が部分一致になる | 条件値にアスタリスクが含まれている | 完全一致にしたい場合は ="=営業部" のように先頭に = を付ける |
| 文字列の列で0または1が返る | DPRODUCT関数は数値の積を返す関数 | 文字列の列を指定すると集計対象にならない。数値列を指定すること |
TIP
結果が0になるトラブルで最も多いのは「対象列に0が含まれている」ケースです。積は1つでも0があると全体が0になる性質があります。データに0がないか確認してみてください。
まとめ
DPRODUCT関数は、データベース形式の表から条件に合うデータの積を求める関数です。
ポイントを整理します。
- 構文は
=DPRODUCT(データベース, フィールド, 条件)で、引数は3つ - 条件は数式内ではなくセル範囲(条件範囲)に書くのが特徴
- 条件範囲は「見出し行+条件行」のセットで作る
- 同じ行に条件を横並びにすればAND条件、別の行にすればOR条件
- 条件セルの値を変えるだけで集計対象を切り替えられる
- PRODUCT関数は全体の積、DPRODUCT関数は条件付きの積
- SUMPRODUCT関数は「行ごとの積の合計」で用途が違う
- 対象列に0があると結果も0になる(積の性質)
- 条件に一致するレコードが0件だと結果は1になる
- 結果がおかしいときはまず「0の混入」と「見出しの不一致」をチェック
複利計算や係数の連続乗算で威力を発揮する関数です。まずは簡単な表で =DPRODUCT(A1:D7, "成長率", F1:F2) から試してみてください。
