TL;DR —
SUMPRODUCTは、同じサイズの範囲を2つ以上並べてセルごとに掛け合わせ、 その積を合計します。構文は=SUMPRODUCT(array1, [array2], …)。 作業列に=A2*B2を作ってSUMしていた処理を、たった1つのセルで完結させる関数です。SUMIFSに対する2つの強みが加重合計(=SUMPRODUCT(Qty, Price))と 真偽値配列による複数条件のロジック。ANDなら配列を掛け、ORなら配列を足します。 中にAND()/OR()を入れてはいけません(配列が1つの値につぶれてしまいます)。 すべての配列は同じサイズでなければならず、違うと#VALUE!になります。 Excel 2003以降のすべてのバージョンで動作します。
=SUMPRODUCT(Qty, Price) ' 売上合計: Σ 数量×単価
=SUMPRODUCT((Region="West")*(Month=1)*Sales) ' 条件付き合計: 西部 かつ 1月
多くの人にとって SUMPRODUCT との出会いは、「2つの条件が両方成り立つときだけ合計する」処理を
動かすためにフォーラムからコピーしてきた謎の数式、というものでしょう。それではあまりに不憫です。
SUMPRODUCT は、Excelの中でひっそりと最強クラスの実力を持つ関数のひとつ。SUMIFS が登場するより
10年も前からスプレッドシートに住みつき、今なお SUMIFS には解けない問題を解いてみせる小さな配列エンジンです。
本ガイドは、この関数がスッと腑に落ちるたった1つのメンタルモデルを軸に組み立て、そのうえで今でも
SUMPRODUCT こそが正解になる仕事を紹介します。
この記事で学べること
- メンタルモデル:
SUMPRODUCTは1セルで完結する内積 #VALUE!の落とし穴 — すべての配列は完全に同じサイズでなければならない- 複数条件のロジック: ANDは掛け算、ORは足し算
- 二重マイナス
--が本当に必要になる場面(そして不要な場面) SUMIFSにはできない2つの仕事: 加重合計と列をまたぐOR- 判断の分かれ目:
SUMPRODUCTvsSUMIFSvs 旧来のCSE配列数式
メンタルモデル: 1セルで完結する内積
ひとまず条件のことは忘れてください。SUMPRODUCT の本質は名前そのまま — **積(product)を取って、
それを合計(sum)**するだけです。2列を渡せば、1行目同士、2行目同士、と下まで順に掛け合わせ、
すべての積を1つの数にまとめて足し込みます。
' Qty = {2; 5; 3}, Price = {10; 4; 20}
=SUMPRODUCT(Qty, Price) ' = 2*10 + 5*4 + 3*20 = 100
考え方はこれが全部です。=A2*B2 という作業列を作って下までドラッグし、合計したことがあるなら、
SUMPRODUCT はまさにそれを作業列なしで1セルに畳み込んだもの。このイメージさえ持っていれば、
あとはすべてその変形にすぎません。次に出てくる「条件」も、同じ「掛けてから足す」の中に混ぜ込まれた
1と0だけの配列にほかならないのです。
まず最初につまずくルール: 配列はすべて同じサイズ
ほかのどんなエラーより先に出会うのが、これです。SUMPRODUCT に渡す配列は、行数も列数も含めて
すべて同じ形でなければなりません。セルを1対1でペアにするからです。形が合わないと #VALUE! になります。
=SUMPRODUCT(A2:A10, B2:B11) ' #VALUE! — 9行 対 10行
=SUMPRODUCT(A2:A10, B2:B10) ' OK — どちらも9行
このバグの典型例は厄介です。数式を組んで動いていたのに、誰かが片方の範囲だけに行を挿入し、
もう一方には挿入しなかった途端に #VALUE! になる。あるいは、もっと悪いことに、片方の範囲を1行分
短く固定してしまい、間違った行同士が静かにペアにされてしまう。すべての範囲を完全に同一にすること、
できればテーブルの同じ列(Table[Qty], Table[Price])を指定して、伸び縮みが連動するようにしましょう。
この習慣ひとつで、サイズ不一致のエラーはまるごと消えます。
条件: ANDは掛け算、ORは足し算
ここはぜひ体に染み込ませてほしい部分です。これは現代のExcelで FILTER や配列数式を支えているのと
同じロジックだからです。(Region="West") のような比較は、1つの答えを返すのではありません。
行ごとに1つずつ、TRUE/FALSE の配列まるごとを返します。そしてExcelは、その配列に算術演算を
した瞬間、TRUE を1、FALSE を0として扱います。つまり——
' AND — 条件を掛ける: 両方が1の行だけがカウントされる
=SUMPRODUCT((Region="West")*(Product="Widget")*Sales)
' OR — 条件を足す: どちらかが1なら行がカウントされる
=SUMPRODUCT(((Region="West")+(Region="East"))*Sales)
1/0の配列を2つ掛けると、両方が1の箇所だけ1になる — これがANDです。足すと、どちらかが
1の箇所ならどこでも1(以上)になる — これがORです。致命的なミスは、ワークシート関数の AND() や
OR() に手を伸ばすこと。これらは配列まるごとを1つの TRUE/FALSE につぶしてしまうので、
数式は行ごとではなく列全体に対して1つの条件を静かに評価してしまいます。ルールは身も蓋もありません。
SUMPRODUCT の中では * と + を使い、AND()/OR() は絶対に使わない。
ORの場合、件数を数えたいなら、2つの条件にマッチした行が二重にカウントされないよう、足した条件を
くくっておきます。ただし上の例のような合計では、各行の Sales はかっこ1つにつき高々1回しか
足されないため、二重カウントは起こりません。
二重マイナス -- が必要になるとき
ネット上の SUMPRODUCT の数式に -- が散りばめられているのを見て、何か魔法かと首をかしげた人も
いるでしょう。魔法ではありません。これは**TRUE/FALSE を1/0に強制変換する二重否定です。
必要になるのは、条件の配列に掛け合わせる相手がいない**ときだけです。
=SUMPRODUCT(--(Region="West")) ' 西部の行数をCOUNT — 変換のため -- が必要
=SUMPRODUCT((Region="West")*Sales) ' 西部の売上をSUM — *Sales がすでに変換している
2つめの数式では、Sales を掛けた時点で真偽値はもう数値になっているので、-- は冗長です。
1つめでは、真偽値の配列が1つだけあって、変換のきっかけになる算術演算がありません。-- がなければ
TRUE/FALSE を合計することになり、これは0にしかなりません。経験則はこうです。
単独の条件配列が1つだけ → -- を付ける。何かと掛け合わされている条件 → すでに変換済み。
SUMIFSには本当にできない2つの仕事
必要なのが単純な複数条件AND合計だけなら、SUMIFS を使ってください。
大きなシートでは高速ですし、はるかに読みやすい。SUMPRODUCT が真価を発揮するのは、SUMIFS では
どうしても表現できない次の2つのケースです。
' 1) 加重合計 / 加重平均 — 2列を掛けてから合計
=SUMPRODUCT(Qty, Price) / SUM(Qty) ' 加重平均単価
' 2) 異なる列をまたぐOR
=SUMPRODUCT(((Region="West")+(Channel="Online")>0)*Sales)
SUMIFS はフィルタリングはできても、合計する前に2列を掛け合わせることはできません。だから
加重平均(数量×単価を合計し、数量で割る)は手に負えませんし、AVERAGEIFS
は単純な平均しか出せません。さらに SUMIFS は条件をANDでしか結合できず、異なる2列をまたぐ
ORをきれいに書く形が存在しません。この2つ — 加重とクロス列OR — こそが、SUMPRODUCT が今なお
すべてのアナリストの道具箱に残っている理由です。
判断の分かれ目: SUMPRODUCT vs SUMIFS vs CSE配列
同じアイデアの3つの時代、そして正解は時とともに移り変わってきました。
- 単純な条件付き合計/件数 →
SUMIFS/COUNTIFSを使う。 最適化されていて、読みやすく、引数の順序が変わることもありません。SUMIFS(C,A,"x",B,"y")で同じ意味を 言えるのに、SUMPRODUCT((A="x")*(B="y")*C)と書かないこと。 - 加重合計、クロス列OR、掛けてからフィルタ →
SUMPRODUCT。ここが本来の居場所で、1セルで完結する点では より新しい関数でも完全には置き換えられません。 - Ctrl+Shift+Enterで確定する旧来の
{=SUM(IF(…))}→ 引退させましょう。SUMPRODUCTはCSEの儀式なしで 配列をそのまま扱えますし、現代のExcelならFILTERが「抽出してから合計」の ケースをより読みやすくカバーします。SUM-of-IFが波かっこで囲まれているのを今も見かけたら、それはほぼ確実にSUMPRODUCT(またはSUMIFS)になるのを待っている数式です。
はっきり言いましょう。SUMPRODUCT はもはや日常使いの条件付き合計ツールではありません。
ですが -IFS ファミリーの手が届かない仕事のために取っておく1本であり、今も誰かが使うあらゆる
バージョンのExcelで寸分違わず動作します。
ExcelMasterの活用法
SUMPRODUCT の難しさは、入力そのものでは決してありません。難しいのは、それが必要かどうかを見極め、
必要なときにAND/ORと -- を正しく決めることです。ExcelMaster は質問をビジネスの言葉で読み取り
——これらの注文をまたいだ加重平均原価とか、西部または通販で売れた売上の合計とか——配列を同じサイズに揃え、
真偽値を正しく掛けたり足したり、-- を必要な場所にだけ付けて数式を書きます。あなたは欲しい数字を説明するだけ。
SUMPRODUCT、SUMIFS、FILTER の選択はExcelMasterが行います。
よくある質問
SUMPRODUCTが#VALUE!を返すのはなぜですか?
ほとんどの場合、サイズの不一致です。配列のうち2つで行数(または列数)が違っています。
SUMPRODUCT はセルを1対1でペアにするので、A2:A10(9行)と B2:B11(10行)は並べられません。
すべての範囲を完全に同じ形にしましょう。テーブルの列を使えば自動的に同期が取れます。
数値範囲に紛れ込んだ文字列の値も、このエラーの原因になることがあります。
SUMPRODUCTで複数条件を使うには?
ANDなら条件を掛け、ORなら足します。=SUMPRODUCT((Region="West")*(Product="Widget")*Sales)。
(Region="West") のような各条件はTRUE/FALSEの配列で、掛け算すると1/0になります。中に
AND()/OR() を使ってはいけません。配列が1つの値につぶれてしまいます。
SUMPRODUCTの二重マイナス(--)は何をしているのですか?
TRUE/FALSEを1/0に強制変換しています。条件の配列がほかの何かと掛け合わされていないときに
必要です——たとえば行数を数えるとき: =SUMPRODUCT(--(Region="West"))。すでに数値の列を
掛けているなら、変換はタダで起こるので -- は冗長です。
SUMPRODUCTとSUMIFS — どちらを使うべき?
素直な条件付き合計なら SUMIFS を使ってください。速くて明快です。合計する前に2列を掛け合わせる
必要があるとき(加重合計)や、SUMIFS にはできない異なる2列をまたぐORを表現したいときは
SUMPRODUCT を使います。
SUMPRODUCTは古いExcelでも動きますか?
はい。最も古い配列関数のひとつで、Excel 2003(およびそれ以前)以降のすべてのバージョンで Ctrl+Shift+Enterなしに動作します。このバージョンをまたいだ信頼性も、人気が衰えない理由の一部です。
検証環境
検証環境: Excel 365 (Windows 11) — 最終確認 2026-06-30。
関連ガイド: Excel SUMIFS · Excel COUNTIFS · Excel SUBTOTAL · Excel AGGREGATE · Excel FILTER
