※本ページにはプロモーション(広告)が含まれています
ExcelでSUMPRODUCT関数を使ったのに「#VALUE!」エラーが出る、計算結果がおかしい、思い通りに動かない――そんな経験はありませんか?
SUMPRODUCT関数はExcelの中でも特に強力な関数のひとつで、複数条件での集計や配列計算など幅広い用途に使えます。しかし、その柔軟性ゆえにエラーや意図しない結果が起きやすい関数でもあります。
この記事では、ExcelのSUMPRODUCT関数が機能しない・エラーになる主な原因と、それぞれの対処法をわかりやすく解説します。初心者の方でも手順通りに進めれば解決できますので、ぜひ参考にしてください。
この記事でわかること
- SUMPRODUCT関数の基本的な仕組みとよくある使い方
- #VALUE!、#REF!、#N/A などのエラーが出る原因
- 配列サイズの不一致によるエラーの見つけ方と修正手順
- 条件式の書き方ミスでゼロや誤った値になる問題の解決法
- 数値と文字列の型が混在したときの対処法
- ワイルドカードや日付を条件にする際の注意点
- SUMPRODUCT関数をより安全・正確に使うためのベストプラクティス
SUMPRODUCT関数とは
SUMPRODUCT関数は、複数の配列(範囲)の対応する要素を掛け合わせ、その合計を返す関数です。基本的な構文は以下のとおりです。
=SUMPRODUCT(配列1, [配列2], [配列3], ...)
たとえば、単価と数量の列がある場合に =SUMPRODUCT(B2:B10, C2:C10) と書けば、「各行の単価×数量の合計」を一度に計算できます。SUM+IF の組み合わせや配列数式(Ctrl+Shift+Enter)を使わずに複数条件の集計ができるため、多くのExcelユーザーに重宝されています。
SUMPRODUCT関数の代表的な用途
| 用途 | 数式例 | 説明 |
|---|---|---|
| 積の合計 | =SUMPRODUCT(B2:B10,C2:C10) | 単価×数量の合計(売上計算など) |
| 1条件集計 | =SUMPRODUCT((A2:A10=”東京”)*B2:B10) | 東京のみの売上合計 |
| 複数条件集計 | =SUMPRODUCT((A2:A10=”東京”)*(C2:C10=”A”)*B2:B10) | 東京かつAランクの売上 |
| 条件付きカウント | =SUMPRODUCT((A2:A10=”東京”)*1) | 東京の件数を数える |
| 重複なしカウント | =SUMPRODUCT(1/COUNTIF(A2:A10,A2:A10)) | ユニークな値の個数を数える |
このように非常に多機能なSUMPRODUCT関数ですが、書き方を少し間違えるだけでエラーや誤った結果につながります。次のセクションで主な原因を確認しましょう。
エラーになる・機能しない主な原因
SUMPRODUCT関数が正しく動かない場合、以下の原因が考えられます。それぞれ詳しく見ていきましょう。
原因1: 配列のサイズが一致していない
最も多いエラーの原因がこれです。SUMPRODUCT関数は、引数に指定するすべての配列が同じ行数・列数でなければなりません。サイズが違うと #VALUE! エラーになります。
たとえば:
=SUMPRODUCT(B2:B10, C2:C11) ← B列は9行、C列は10行 → #VALUE!エラー
行数・列数が違う範囲を混在させると、対応する要素が存在しないためエラーになります。
原因2: 条件式の書き方が間違っている
SUMPRODUCT関数で条件を使う場合、条件式は TRUE/FALSE(1/0) を返す必要があります。書き方を間違えると、ゼロや誤った値が返ります。
よくある間違いの例:
=SUMPRODUCT(A2:A10="東京", B2:B10) ← カンマ区切りはNG(積になる)
=SUMPRODUCT((A2:A10="東京")*B2:B10) ← アスタリスク掛け算がNG
条件を掛け算で使う場合は、条件式を () で囲み、* で結合する書き方が正しいです。また、カンマで区切る場合は論理値の配列がそのまま使われ、意図しない結果になることがあります。
原因3: 数値と文字列の型が混在している
Excelでは、見た目が数字でも「文字列として入力された数値」が存在します。セルの左上に緑の三角マークが表示されていたり、左揃えになっている数字は文字列型の可能性があります。
SUMPRODUCT関数はこのような文字列型の数値を計算対象に含めると、正しく計算されず 0 を返したり、条件比較が失敗することがあります。
原因4: 参照範囲にエラー値が含まれている
参照範囲のいずれかのセルに #DIV/0!、#REF!、#N/A などのエラー値が含まれていると、SUMPRODUCT全体がそのエラーを引き継いで表示します。
=SUMPRODUCT(B2:B10, C2:C10)
↑ C5に #DIV/0! があると → 結果全体が #DIV/0! になる
原因5: 空白セルや空白行が範囲に含まれている
範囲内に空白セルがある場合、通常は 0 として処理されますが、条件式と組み合わせると意図しないカウントが発生することがあります。特に「空白ではない」を条件にしたいときに、空白の扱いが原因でズレが生じます。
原因6: 全角・半角・スペースの不一致
条件に文字列を指定する場合、データ側が全角スペースを含んでいたり、半角と全角が混在していると条件が一致しません。見た目は同じでも内部的に異なる文字として扱われます。
原因7: ワイルドカードが使えない
COUNTIF関数やSUMIF関数ではワイルドカード(*、?)が使えますが、SUMPRODUCT関数の条件式では直接ワイルドカードは使えません。
=SUMPRODUCT((A2:A10="東*")*B2:B10) ← NG:ワイルドカードは機能しない
部分一致で集計したい場合は、ISNUMBER関数とSEARCH関数を組み合わせる必要があります。
対処法
対処法1: 配列サイズを統一する
まず、すべての引数の行数・列数が一致しているか確認します。
- 数式バーで関数を確認し、各引数の範囲(例: B2:B10、C2:C10)の行数を数える
- ズレがあれば、行数が少ない方を多い方に合わせて修正する
- 修正後にEnterキーで確定し、エラーが消えたか確認する
便利なチェック方法: 各範囲を選択してステータスバーの「COUNT」や「選択範囲」を確認すると、行数がすぐわかります。

対処法2: 条件式の書き方を修正する
SUMPRODUCT関数で条件集計を行う正しい書き方を確認します。
基本パターン(掛け算方式):
=SUMPRODUCT((条件1)*(条件2)*合計範囲)
具体例:
=SUMPRODUCT((A2:A100="東京")*(B2:B100="完了")*C2:C100)
この式では:
(A2:A100="東京")→ 東京の行は 1(TRUE)、それ以外は 0(FALSE)(B2:B100="完了")→ 完了の行は 1、それ以外は 0C2:C100→ 合計したい値- これらを掛け合わせると、両条件を満たす行のC列の値のみが合計される
カンマ区切り方式との違い:
| 方式 | 書き方 | 動作 |
|---|---|---|
| 掛け算方式(推奨) | =SUMPRODUCT((A2:A10=”東京”)*B2:B10) | 条件を掛け算でフィルタリング。確実 |
| カンマ方式(非推奨) | =SUMPRODUCT(A2:A10=”東京”, B2:B10) | TRUE/FALSEをそのまま数値化。誤動作の場合あり |
| 二重マイナス方式 | =SUMPRODUCT(–(A2:A10=”東京”),B2:B10) | 条件を強制的に0/1に変換。確実だが記述が長い |
対処法3: 文字列型の数値を数値型に変換する
文字列として保存されている数値がある場合、以下の方法で数値型に変換します。
方法A:VALUE関数を使う
=SUMPRODUCT(VALUE(B2:B10)*C2:C10)
方法B:1を掛ける
=SUMPRODUCT(B2:B10*1, C2:C10)
方法C:データの変換(根本解決)
- 文字列型の数値が入っている列を選択する
- 「データ」タブ→「区切り位置」をクリック
- 「完了」をクリックするだけで、文字列が数値型に変換される
または、任意の空白セルに「1」と入力し、そのセルをコピーして、変換したいセル範囲を選択後「形式を選択して貼り付け」→「乗算」を選ぶ方法も有効です。
対処法4: エラー値を無視して計算する
参照範囲内のエラー値を無視してSUMPRODUCTを計算したい場合は、IFERROR関数を組み合わせます。
=SUMPRODUCT(IFERROR(B2:B10,0)*IFERROR(C2:C10,0))
この書き方で、エラー値のセルを 0 として扱い、正常なセルのみで計算します。
また、条件集計でエラーを除外したい場合:
=SUMPRODUCT(ISNUMBER(B2:B10)*(A2:A10="東京")*IFERROR(B2:B10,0))
対処法5: 空白セルを正しく扱う
空白以外のセルのみを対象にする場合:
=SUMPRODUCT((A2:A10<>"")*B2:B10)
空白セルのみを対象にする場合:
=SUMPRODUCT((A2:A10="")*B2:B10)
ただし、スペースのみが入ったセルは空白と見なされないため、TRIM関数を使って前処理するか、条件式を工夫する必要があります。
配列サイズを確認する手順(詳細)
SUMPRODUCT関数で #VALUE! エラーが出たとき、配列サイズの不一致が原因かどうかを確認する具体的な手順を説明します。
- エラーが出ているセルをクリックして数式バーを確認する
- 各引数の範囲を確認する(例: B2:B10 と C2:C11 など)
- 行数を数える:B2:B10 は 9行、C2:C11 は 10行 → 不一致
- 範囲を修正して行数を統一する(C2:C10 にするなど)
- Enterキーで確定してエラーが解消されたか確認する
自動確認の方法: 各引数を個別に選択してステータスバーの「カウント: ○」を見ると、簡単に行数を比較できます。

よくある状況と対処法
状況1: 結果がゼロになる
SUMPRODUCT関数の結果が 0 になるケースは複数あります。
| 原因 | 確認方法 | 対処法 |
|---|---|---|
| 条件に一致するデータがない | COUNTIF関数で件数確認 | 条件値やデータを見直す |
| 文字列型の数値がある | セル左上の緑マーク確認 | VALUE関数または「区切り位置」で変換 |
| 全角・半角の不一致 | 条件文字列を直接コピーして確認 | JIS関数またはASC関数で統一 |
| スペースが混入している | LEN関数で文字数確認 | TRIM関数またはSUBSTITUTE関数でスペース除去 |
| 条件式の書き方ミス | 条件部分のみを別セルでテスト | 掛け算方式に変更する |
状況2: 部分一致で集計したい
SUMPRODUCT関数はワイルドカードが直接使えないため、ISNUMBER関数とSEARCH関数を組み合わせます。
=SUMPRODUCT(ISNUMBER(SEARCH("東京",A2:A100))*B2:B100)
この式で「東京」を含む行のB列の値を合計できます。SEARCH関数は大文字小文字を区別しないため、厳密に区別したい場合はFIND関数を使います。
=SUMPRODUCT(ISNUMBER(FIND("東京",A2:A100))*B2:B100)
状況3: 日付を条件にしたい
日付を条件にする場合、テキスト文字列として書くと認識されないことがあります。
NG: =SUMPRODUCT((A2:A100="2026/1/1")*B2:B100)
OK: =SUMPRODUCT((A2:A100=DATE(2026,1,1))*B2:B100)
日付の範囲を条件にする場合:
=SUMPRODUCT((A2:A100>=DATE(2026,1,1))*(A2:A100<=DATE(2026,3,31))*B2:B100)
状況4: 重複なしでユニーク件数を数えたい
SUMPRODUCT関数を使ったユニークカウントの定番式は以下のとおりです。
=SUMPRODUCT(1/COUNTIF(A2:A100,A2:A100))
ただし、空白セルがある場合にエラーになります。空白を除外するには:
=SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&""))
または、Excel 365/2021以降ではUNIQUE関数とCOUNTA関数の組み合わせが簡単です。
=COUNTA(UNIQUE(A2:A100))
状況5: 計算が極端に遅い
SUMPRODUCT関数は列全体(A:A のような指定)を参照すると、100万行以上を処理しようとして動作が遅くなります。
NG: =SUMPRODUCT((A:A="東京")*B:B) ← 1,048,576行を処理
OK: =SUMPRODUCT((A2:A1000="東京")*B2:B1000) ← データ範囲のみ
データ範囲が可変の場合は、データ末尾を動的に取得するか、テーブル機能(Ctrl+T)を使ってテーブル参照にする方法が有効です。
条件式の構文を確認する手順(詳細)
SUMPRODUCT関数の結果がおかしいとき、条件式が正しく機能しているか確認する手順です。
- SUMPRODUCT式の条件部分だけを別のセルにコピーして評価する
例:=(A2:A10="東京")を別セルに入力してEnter → TRUE/FALSEの配列が確認できる - 条件がすべてFALSEになっていないか確認する
- 条件式の掛け算部分を
--(二重マイナス)で 0/1 に明示的に変換してみる
例:=SUMPRODUCT(--(A2:A10="東京")*B2:B10) - 条件を1つずつ切り離してテストする(複数条件の場合)
- 最終的に全条件が揃った数式に戻す
デバッグの裏技: 数式バーで式の一部を選択してF9キーを押すと、選択部分の計算結果をその場で確認できます。問題箇所の特定に非常に便利です。
詳細設定・応用テクニック
テーブル機能を使って安全に参照する
Excelのテーブル機能(Ctrl+T)を使うと、データを追加しても自動的に範囲が拡張され、SUMPRODUCT関数の参照範囲がズレる心配がなくなります。
=SUMPRODUCT((テーブル1[地域]="東京")*テーブル1[売上])
テーブル名と列名が自動的に使えるため、式が読みやすくなる利点もあります。
SUMPRODUCT vs SUMIF の使い分け
| 関数 | 得意なこと | 苦手なこと |
|---|---|---|
| SUMIF | 1条件の合計。ワイルドカード対応 | 複数条件には対応しない(SUMIFS必要) |
| SUMIFS | 複数条件の合計。ワイルドカード対応 | 配列計算や積の合計には使えない |
| SUMPRODUCT | 積の合計、複雑な条件、配列計算 | ワイルドカード非対応、計算が重くなる場合あり |
単純な条件集計であれば SUMIFS の方が高速で書きやすい場合もあります。SUMPRODUCT は「積の合計」や「配列演算が必要な複雑な集計」の場面で特に力を発揮します。
Excel 365での代替関数
Excel 365(Microsoft 365)を使用している場合、新しいスピル関数を使うと、SUMPRODUCT よりも直感的に書ける場合があります。
| 目的 | SUMPRODUCT式 | 365代替式 |
|---|---|---|
| 条件付き合計 | =SUMPRODUCT((A:A=”東京”)*B:B) | =SUMIFS(B:B,A:A,”東京”) |
| ユニークカウント | =SUMPRODUCT(1/COUNTIF(…)) | =COUNTA(UNIQUE(A2:A100)) |
| フィルタ付き合計 | =SUMPRODUCT(…複雑な条件…) | =SUM(FILTER(B2:B100,A2:A100=”東京”)) |
数値と文字列の型変換を確認する手順(詳細)
数値が文字列として保存されているかを確認し、数値型に変換する具体的な手順です。
- 確認方法:問題のセルを選択してホームタブの「数値グループ」の表示を確認する。「文字列」と表示されていたら文字列型
- 確認方法2:=ISNUMBER(セル) で FALSE が返ったら文字列型
- 変換方法A(VALUE関数):新しい列に
=VALUE(元のセル)を入力し、数値に変換後、コピー→値貼り付けで置き換える - 変換方法B(区切り位置):変換したいセル範囲を選択 → 「データ」タブ → 「区切り位置」→「完了」をクリックするだけで数値型に変換
- 変換方法C(エラー修正ボタン):セル左上の緑の三角マークをクリック → 「数値に変換する」をクリック

よくある質問(FAQ)
Q1. SUMPRODUCT関数で #VALUE! エラーが出ます。どうすれば直りますか?
A. 最も多い原因は引数の配列サイズの不一致です。数式バーを開いて各引数の範囲を確認し、すべての行数・列数が一致するよう修正してください。例えば B2:B10(9行)と C2:C11(10行)があれば一方を C2:C10 に統一します。それでも直らない場合は、参照範囲内に #REF! や #N/A などのエラー値が含まれていないか確認し、IFERROR関数で対処します。
Q2. 条件を指定しているのに結果が常に0になります。
A. 以下の点を確認してください。①条件文字列の全角・半角・スペースの混入(データをコピーして直接条件に貼り付けてテスト)、②数値が文字列型として保存されていないか(ISNUMBER関数で確認)、③条件式の括弧の書き方が正しいか(掛け算方式 (条件)*値範囲 になっているか)。条件部分のみを別セルに入力して TRUE/FALSE を確認するデバッグが有効です。
Q3. SUMPRODUCT関数でワイルドカード(*、?)は使えますか?
A. SUMPRODUCT関数の条件式では直接ワイルドカードは使えません。部分一致で集計したい場合は、ISNUMBER関数とSEARCH関数(大文字小文字区別なし)またはFIND関数(大文字小文字区別あり)を組み合わせます。例: =SUMPRODUCT(ISNUMBER(SEARCH("東京",A2:A100))*B2:B100)
Q4. 複数シートをまたいでSUMPRODUCTを使えますか?
A. 標準的な方法では、SUMPRODUCT関数は複数シートの3D参照をサポートしていません。Sheet1:Sheet3!A1:A10 のような参照はエラーになります。複数シートを集計したい場合は、INDIRECT関数と組み合わせる方法(複雑になる)か、各シートのSUMPRODUCT結果をSUM関数で合計する方法が現実的です。Excel 365ではPowerQuery を使ったデータ統合も検討してください。
Q5. SUMPRODUCT関数の計算が遅くて困っています。
A. 処理を高速化する方法がいくつかあります。①列全体(A:A)の指定をデータ範囲(A2:A1000)に限定する、②Excel のテーブル機能を使ってスマートな参照にする、③複数条件がある場合はSUMIFSで代替できないか検討する(SUMIFSの方が高速)、④計算オプションを「手動」にして必要時のみF9で再計算する。大量データを扱う場合はPowerQueryやPivotTableへの移行も有効です。
Q6. SUMPRODUCT の結果と SUMIF の結果が一致しません。なぜですか?
A. 主な原因として、①SUMPRODUCTは文字列型数値を 0 として扱うがSUMIFは無視する場合がある、②条件の書き方によって空白セルの扱いが異なる、③参照範囲のズレが挙げられます。まず両関数の参照範囲が完全に同じか確認し、次にデータ型(文字列型数値の有無)を確認してください。ISNUMBER関数で数値型かどうかを一括チェックするのが最短の確認方法です。
Q7. SUMPRODUCT で OR 条件(いずれかに一致)を使いたい場合はどう書きますか?
A. OR条件は加算(+)を使います。ただし、掛け算との組み合わせに注意が必要です。
OR条件: =SUMPRODUCT(((A2:A100="東京")+(A2:A100="大阪"))*B2:B100)
ただし、この式では「東京」かつ「大阪」(実際にはあり得ませんが他の条件と組み合わせる場合)が両方マッチすると2回カウントされる可能性があります。MIN関数を使って 1 に制限する方法も有効です:=SUMPRODUCT(MIN(1,(A2:A100="東京")+(A2:A100="大阪"))*B2:B100)
Amazonでおすすめ:Excel関連書籍・グッズ
この記事に関連するおすすめ商品
Microsoft 365 Personal(年間サブスクリプション)
約14,900円/年
Excel・Word・PowerPoint等を最新版で使えるサブスクリプション。SUMPRODUCT改良やスピル関数も最新版で利用可能
Excel 関数・数式 完全攻略本
約1,500〜2,500円
SUMPRODUCT関数を含むExcelの主要関数を網羅した解説書。初心者から中上級者まで対応
Excel作業効率アップ ワイヤレスキーボード&マウスセット
約3,000〜8,000円
Excelの作業効率を高めるキーボード・マウスセット。数式入力やショートカット操作に最適
※ 価格は変動します。最新価格はリンク先でご確認ください
まとめ
ExcelのSUMPRODUCT関数が機能しない・エラーになる主な原因と対処法をまとめます。
| 原因 | 症状 | 対処法 |
|---|---|---|
| 配列サイズの不一致 | #VALUE!エラー | 全引数の行数・列数を統一する |
| 条件式の書き方ミス | 結果が0になる | 掛け算方式 (条件)*値 に修正 |
| 文字列型の数値 | 結果が0になる | VALUE関数または区切り位置で変換 |
| エラー値の混入 | エラーが伝播する | IFERROR関数で対処 |
| 全角・半角の不一致 | 条件が一致しない | JIS/ASC関数で統一 |
| ワイルドカードを使用 | 機能しない | ISNUMBER+SEARCH関数に変更 |
| 列全体参照 | 計算が極端に遅い | データ範囲のみに限定する |
SUMPRODUCT関数は一度使いこなせると、Excelの集計作業が大幅に効率化します。エラーが出た際は、まず配列サイズの確認、次に条件式の書き方、最後にデータ型の確認という順番で原因を絞り込むと効率的に解決できます。
F9キーで数式の一部を評価する方法や、条件部分を別セルに切り出してテストするデバッグ手法も、ぜひ活用してみてください。問題解決の大きな助けになります。
Excel作業で困ったことがあれば、ぜひ当サイトの他の記事も参考にしてみてください。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!