Excelで「特定のカテゴリだけの数値を全部掛け合わせたい」「条件を満たすデータの積を求めたい」と思ったことはありませんか?
データが多いと、手作業でフィルターをかけてから電卓で掛け算するのは大変ですよね。条件を変えるたびにやり直すのも面倒です。
そんなときに便利なのがExcelの DPRODUCT関数 です。条件に一致するレコードの数値を自動で掛け合わせて、積を返してくれますよ。
この記事では、DPRODUCT関数の基本的な書き方から応用例まで解説します。よくあるエラーの対処法や、似た関数との使い分けもあわせて紹介しますね。
ExcelのDPRODUCT関数とは?
DPRODUCT関数は「ディープロダクト」と読みます。Database PRODUCTの略で、データベース形式の表から条件に一致するレコードの「数値の積(掛け算の結果)」を求める関数です。
Excelにはデータベース関数と呼ばれるグループがあります。DPRODUCT関数はそのひとつで、DCOUNT関数(条件付きカウント)やDSUM関数(条件付き合計)、DAVERAGE関数(条件付き平均)と同じ仲間です。
データベース関数の特徴は、条件をセル上に書き出して指定するところです。数式の中に条件を埋め込まないので、条件を変えたいときはセルの値を書き換えるだけで済みますよ。
DPRODUCT関数の大きなポイントは 条件に一致する数値を掛け合わせる ところです。「割引率を連続で適用した結果を求めたい」「複数の係数を掛け合わせて最終値を出したい」といった場面で役立ちます。
DPRODUCT関数はExcel 2003以降のすべてのバージョンで使えます。Googleスプレッドシートでも同じ書き方で使えるので、覚えておくと活用の幅が広がりますよ。
ExcelのDPRODUCT関数の書き方(構文と引数)
基本構文
=DPRODUCT(データベース, フィールド, 検索条件)
引数は3つあり、すべて必須です。
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| データベース | 必須 | 見出し行を含むセル範囲(例: A1:D10) |
| フィールド | 必須 | 積を求める対象の列の見出し名(”係数”)または列番号(1始まり) |
| 検索条件 | 必須 | 見出し行+条件値を含むセル範囲 |
データベース には、表全体を見出し行ごと指定します。見出し行がないと正しく動作しないので注意してください。
フィールド には、掛け合わせたい数値が入っている列を指定します。指定方法は2通りあります。
| 指定方法 | 書き方の例 | 説明 |
|---|---|---|
| 列の見出し名をダブルクォーテーションで囲む | “係数” | 見出しが「係数」の列を対象にする |
| 列番号を数値で指定する | 3 | 左端から3番目の列を対象にする |
見出し名で指定するほうが数式の意味がわかりやすいので、基本的にはこちらをおすすめしますよ。
検索条件 には、見出し行と条件値がセットになったセル範囲を指定します。条件範囲はデータベースの範囲と重ならない場所に作ってください。重なっていると正しい結果が返りません。
DPRODUCT関数の基本的な使い方
ここでは、製品データから特定カテゴリの係数を掛け合わせる例で解説します。
サンプルデータ
以下のような製品リストがA1:D7に入っているとします。
| 製品名 | カテゴリ | 係数 | 売上 |
|---|---|---|---|
| 製品A | 電子部品 | 1.2 | 500 |
| 製品B | 機械部品 | 0.8 | 300 |
| 製品C | 電子部品 | 1.5 | 400 |
| 製品D | 電子部品 | 0.9 | 600 |
| 製品E | 機械部品 | 1.1 | 350 |
| 製品F | 電子部品 | 1.3 | 450 |
この表で「電子部品の係数をすべて掛け合わせた結果」を求めてみましょう。
条件の設定
F1:F2に条件を入力します。
| F1 | F2 |
|---|---|
| カテゴリ | 電子部品 |
F1にはデータベースの見出しと同じ文字列を入力します。F2には抽出条件の値を入力します。
数式の入力
電子部品の係数の積を求める数式は次のとおりです。
=DPRODUCT(A1:D7, "係数", F1:F2)
この数式は「A1:D7のデータベースから、カテゴリが電子部品のレコードを探して、係数列の数値をすべて掛け合わせた結果を返す」という意味です。
電子部品の係数は1.2、1.5、0.9、1.3の4つです。1.2 x 1.5 x 0.9 x 1.3 = 2.106 が結果になります。
条件を「機械部品」に変えるとF2のセルを書き換えるだけでOKです。機械部品の係数は0.8と1.1なので、0.8 x 1.1 = 0.88 になりますよ。
DPRODUCT関数の応用:複数条件で積を求める
AND条件(すべての条件を同時に満たす)
複数の条件をすべて満たすレコードの積を求めるには、条件を 同じ行 に並べます。
たとえば「電子部品」かつ「係数が1以上」のレコードの売上の積を求めるには、条件範囲を次のように設定します。
| F1 | G1 |
|---|---|
| カテゴリ | 係数 |
| 電子部品 | >=1 |
=DPRODUCT(A1:D7, "売上", F1:G2)
電子部品かつ係数が1以上のレコードは、製品A(売上500)、製品C(売上400)、製品F(売上450)の3つです。500 x 400 x 450 = 90,000,000 が結果になります。
OR条件(いずれかの条件を満たす)
いずれかの条件を満たすレコードの積を求めるには、条件を 別の行 に書きます。
たとえば「電子部品」または「機械部品」の売上の積を求めるには、条件範囲を次のように設定します。
| F1 |
|---|
| カテゴリ |
| 電子部品 |
| 機械部品 |
=DPRODUCT(A1:D7, "売上", F1:F3)
全レコードが対象になるので、500 x 300 x 400 x 600 x 350 x 450 = 5,670,000,000,000,000 が結果です。
積の計算は値が増えるとすぐに大きな数値になります。結果が極端に大きくなったときは、対象レコードの数が想定どおりか確認してみてください。
AND条件とOR条件の使い分けがデータベース関数のポイントです。「同じ行に書けばAND、別の行に書けばOR」と覚えておけば迷いませんよ。
AND条件とOR条件の組み合わせ
AND条件とOR条件は組み合わせることもできます。たとえば「電子部品で係数1以上」または「機械部品で係数1以上」のレコードの積を求めたい場合、条件範囲を次のように設定します。
| F1 | G1 |
|---|---|
| カテゴリ | 係数 |
| 電子部品 | >=1 |
| 機械部品 | >=1 |
=DPRODUCT(A1:D7, "売上", F1:G3)
行が同じ列の組み合わせはAND、別の行はOR、という基本ルールが組み合わさっています。条件範囲を整えるだけでかなり複雑な絞り込みができるのが、データベース関数の強みですよ。
比較演算子を使った条件指定
検索条件には等号だけでなく、比較演算子も使えます。
| 演算子 | 意味 | 書き方の例 |
|---|---|---|
= | 等しい | =1.2(明示的に等しい) |
> | より大きい | >1 |
>= | 以上 | >=1 |
< | より小さい | <1 |
<= | 以下 | <=1 |
<> | 等しくない | <>0 |
「係数が1以上のレコードだけ」「売上が500以下のレコードだけ」のように、数値の範囲で絞り込みたいときに便利です。とくに <>0(ゼロを除外)はDPRODUCT関数では重宝します。後述するように対象データに0があると積が0になってしまうので、<>0 で除外しておくと安全ですよ。
DPRODUCT関数の実践活用例
DPRODUCT関数の真価が発揮されるのは、実務で「条件付きの掛け算」が必要な場面です。代表的な使いどころを3つ紹介しますね。
連続割引率を適用した最終価格の計算
セール商品で「会員割引→クーポン割引→ポイント還元」のように複数の割引率を順番に掛けていく場面があります。割引率を一覧化しておけば、DPRODUCT関数で一発で最終率を求められます。
| 割引種別 | 適用フラグ | 残存率 |
|---|---|---|
| 会員割引 | ○ | 0.9 |
| クーポン | ○ | 0.85 |
| ポイント還元 | ○ | 0.95 |
| キャンペーン | × | 0.8 |
「適用フラグが○」のレコードだけを掛け合わせれば、最終的な残存率が出ます。商品の元値にこの結果を掛ければ最終価格が出せますよ。
複数係数の合成(補正係数の計算)
工程ごとに歩留まり率や補正係数が決まっているときに、対象工程だけの合成係数を求めたい場合に使えます。条件を変えるだけで「Aライン全工程」「Bライン特定工程のみ」などの切り替えが瞬時にできます。
条件付きの確率計算
統計や品質管理の場面で「特定条件下での独立事象の同時発生確率」を求める計算にも使えます。各事象の確率をデータベース化し、条件で絞り込んだうえで掛け合わせるイメージです。
為替・物価指数の連結計算
複数年・複数通貨にまたがる指数を連結したいときにも便利です。たとえば「2022年から2025年までの円ベース物価上昇率を連続して掛けて累計上昇率を出す」といった計算では、対象年・対象通貨を条件で絞り込んでDPRODUCT関数で一発計算ができます。
| 年 | 通貨 | 上昇率(前年比) |
|---|---|---|
| 2022 | JPY | 1.025 |
| 2023 | JPY | 1.032 |
| 2024 | JPY | 1.028 |
| 2025 | JPY | 1.021 |
「通貨がJPY」の上昇率をすべて掛ければ、累計の物価上昇率が出ます。期間を変えるたびに数式を書き直す必要がないので、レポート作成がぐっと楽になりますよ。
生産歩留まり率のシナリオ比較
製造業で「各工程の歩留まり率を掛け合わせて全体の歩留まりを出す」ケースでも活躍します。工程ごとの歩留まりをデータベース化し、ラインや製品の種類を条件にすれば、シナリオ別の最終歩留まりが一覧で比較できます。
いずれの場合も、条件をセル上で管理できるので、シミュレーションがしやすいのがDPRODUCT関数のメリットです。条件付きの合計が必要な場面ではDSUM関数、平均が必要な場面ではDAVERAGE関数と、目的に応じて使い分けるとさらに便利になります。
DPRODUCT関数でよくあるエラーと対処法
#VALUE! エラー
フィールド名が間違っている場合に発生します。
- 原因: フィールドに指定した見出し名がデータベースの見出し行に存在しない
- 対処法: ダブルクォーテーションの中の文字列が、データベースの見出し行と完全に一致しているか確認してください。スペースの有無や全角半角の違いにも注意しましょう
フィールドを列番号で指定しているときは、番号が列数の範囲内に収まっているかも確認してみてください。
結果が想定と違う
条件に一致するレコードが正しく抽出されていない場合に起こります。
- 原因1: 検索条件の値が正しくない(スペルミス、全角半角の違いなど)
- 原因2: 条件範囲にデータベースと重なる行が含まれている
- 対処法: 条件の値が正しいか確認してください。条件範囲はデータベースから離れた位置に作るのがおすすめです
結果が0になる
フィールドに指定した列に0が含まれていると、積の結果が0になります。
- 原因: 条件に一致するレコードの中に数値0のセルがある
- 対処法: 対象データに0が含まれていないか確認してください。0が含まれていると、どれだけ大きな数値があっても積は0になります
DPRODUCT関数特有の落とし穴なので、結果が0になったらまず対象レコードに0がないかチェックする癖をつけておくと安心です。
#NAME? エラー
数式の入力ミスで発生します。
- 原因: 関数名のスペルミス、またはフィールド名のダブルクォーテーション忘れ
- 対処法: 「DPRODUCT」のスペルを確認してください。フィールド名を文字列で指定する場合は
"係数"のようにダブルクォーテーションで囲む必要があります
DPRODUCT関数と似た関数の違い・使い分け
DPRODUCT関数とPRODUCT関数の違い
いちばん混同しやすいのがDPRODUCT関数とPRODUCT関数です。違いは条件指定の有無にあります。
| 比較項目 | DPRODUCT関数 | PRODUCT関数 |
|---|---|---|
| 条件指定 | できる(検索条件で絞り込む) | できない(指定範囲すべてを掛ける) |
| データ形式 | データベース形式(見出し行が必要) | セル範囲を直接指定 |
| 用途 | 条件に一致するデータだけの積を求めたいとき | 範囲内のすべての数値の積を求めたいとき |
DPRODUCT関数が向いているケース:
- 「営業部だけの係数を掛け合わせたい」のように条件で絞りたいとき
- 条件をセルで管理して頻繁に切り替えたいとき
PRODUCT関数が向いているケース:
- 条件不要で範囲内の数値をすべて掛けたいとき
- シンプルな掛け算をしたいとき
具体的な書き比べ
同じ「電子部品の係数の積」を求める場合、それぞれの書き方を比べてみましょう。
DPRODUCT関数の場合(条件範囲F1:F2に「カテゴリ/電子部品」を用意):
=DPRODUCT(A1:D7, "係数", F1:F2)
PRODUCT関数の場合(IF関数で電子部品の係数だけを抽出する必要あり):
=PRODUCT(IF(B2:B7="電子部品", C2:C7, 1))
PRODUCT関数で同じことをやろうとすると、IF関数で「条件外は1にする」ような工夫が必要です(1は掛けても結果に影響しないため)。式が複雑になるうえ、数式に条件が埋め込まれているので、条件を変えるたびに数式自体を書き換えなければなりません。
その点、DPRODUCT関数は条件をセル上で管理できるので、条件を変えるのも一目で内容を理解するのもラクです。条件付きの積を扱うなら、迷わずDPRODUCT関数を選んでOKですよ。
DPRODUCT関数とほかのデータベース関数の比較
DPRODUCT関数は、データベース関数ファミリーのひとつです。条件の指定方法はすべて同じで、違いは「条件に一致したレコードをどう処理するか」です。
| 関数 | 処理内容 |
|---|---|
| DPRODUCT関数 | 数値の積を求める |
| DSUM関数 | 数値の合計を求める |
| DCOUNT関数 | 数値データの件数を数える |
| DCOUNTA関数 | 空白以外のセルの件数を数える |
| DAVERAGE関数 | 数値の平均値を求める |
| DGET関数 | 条件に一致する1件のデータを取り出す |
どの関数も引数は「データベース, フィールド, 検索条件」の3つです。構文が同じなので、ひとつ覚えればほかのデータベース関数にもすぐ応用できますよ。
実務では「条件付き合計」を求めるDSUM関数や、「条件付き件数」のDCOUNT関数と組み合わせて、同じ条件でも合計・件数・平均・積をまとめて出すと、ダッシュボード的なシートが作りやすくなります。
DPRODUCT関数についてよくある質問(FAQ)
Q1. DPRODUCT関数で対象レコードが0件の場合、結果はどうなりますか?
検索条件に一致するレコードが1件もない場合、DPRODUCT関数は 0 を返します。「1(積の単位元)」ではなく0が返るので、結果が0だったときは「条件が厳しすぎて対象が0件」なのか「対象データの中に0が含まれている」のかを切り分ける必要があります。
切り分け方は簡単で、同じ条件でDCOUNT関数を使ってレコード件数を数えてみてください。件数が0ならレコード自体がなく、件数が1以上なら対象データのどこかに0が含まれている、と判断できます。
Q2. DPRODUCT関数で空白セルやテキストが混ざっているとどうなりますか?
DPRODUCT関数は、フィールドに指定した列の 数値だけ を対象に積を計算します。空白セルやテキストデータは無視されるので、エラーにはならず計算は通ります。
ただし「無視される」ということは、想定していたレコードが計算対象から外れている可能性もあります。たとえば「N/A」や「-」のような文字列が紛れていると、その行は積に含まれません。意図しない結果になったときは、対象列のデータ型が数値で揃っているか確認してみてください。
Q3. DPRODUCT関数とSUMPRODUCT関数は何が違いますか?
名前が似ていますが、まったく別の関数です。
| 関数 | 処理内容 |
|---|---|
| DPRODUCT関数 | 条件に一致するレコードの 1列分 の数値を掛け合わせる |
| SUMPRODUCT関数 | 複数の配列を「行ごとに掛け算」してから「全行を合計」する |
DPRODUCT関数は条件付きの「積」、SUMPRODUCT関数は配列同士の「積和」を計算する関数です。たとえば「単価×数量」を全行分計算して合計したい場合はSUMPRODUCT関数の出番です。
「掛け算の結果を1つ取得したい」のがDPRODUCT関数、「掛け算してから合計したい」のがSUMPRODUCT関数、と覚えておくと混同しませんよ。
まとめ
この記事では、ExcelのDPRODUCT関数の使い方を解説しました。
- DPRODUCT関数は、データベース形式の表から条件に一致するレコードの「数値の積」を求める関数
- 引数は「データベース」「フィールド」「検索条件」の3つで、すべて必須
- AND条件は同じ行、OR条件は別の行に条件を書く
- 連続割引・補正係数・条件付き確率など、実務の「条件付き掛け算」で活躍
- 対象データに0が含まれると結果が0になるので注意
- 範囲全体の積を求めるだけならPRODUCT関数がシンプル
データベース関数は条件をセル上で管理できるのが最大のメリットです。DSUM関数・DCOUNT関数・DAVERAGE関数と組み合わせれば、同じ条件の合計・件数・平均・積をまとめて出せて、条件付き集計がぐっと効率的になりますよ。