SUMPRODUCT関数の使い方・読み方|掛けて足す、そして複数条件の集計

執筆者:

カテゴリ:

SUMPRODUCT関数の使い方・読み方のイメージ

集計

SUMPRODUCT関数の使い方・読み方

Excel関数辞典

読み方:SUMPRODUCT は「サムプロダクト」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

SUMPRODUCTは、対応する要素を掛け合わせて、その合計を返す関数です。

使える環境Excel○Googleスプレッドシート○
このページの中身(22項目)
  1. 書式
  2. 基本の動き
  3. 掛け算がANDになる仕組み
  4. SUMIFSで書けるなら、そちらを使う
  5. SUMIFSでは書けない集計
  6. 注意点
  7. Excelとの違い
  8. 作業列を作らずに済ませる
  9. 条件付きの集計として使う
  10. 条件式の書き方に慣れる
  11. 件数を数える使い方
  12. 加重平均を実務で使う
  13. 二次元の集計に使う
  14. 数式を書く前の手順
  15. どの関数でも共通する確認
  16. 引き継ぐときに残すこと
  17. 「集計」の関数を全体から見る
  18. このサイトの収録状況
  19. よくある質問
  20. この分野の他の記事
  21. まとめ
  22. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

「単価 × 数量」を全行分まとめて合計する、というのが本来の用途です。ただし実務では、SUMIFS では書けない条件の集計に使われることのほうが多くなります。

SUMPRODUCT関数の使い方の記事構成図
SUMPRODUCT関数の使い方:この記事で扱う内容

書式

=SUMPRODUCT(範囲1, [範囲2], ...)

範囲はすべて同じ大きさである必要があります。

基本の動き

AB
1単価数量
21003
32002
41504
=SUMPRODUCT(A2:A4, B2:B4)

結果:1300(100×3 + 200×2 + 150×4)

作業列に「金額」を作って SUM する必要がありません。列を1つ減らせます。

SUMPRODUCT関数の使い方の要点図
SUMPRODUCT関数の使い方

掛け算がANDになる仕組み

ここがSUMPRODUCTの本領です。

TRUE は1、FALSE は0として扱われます。この性質を使うと、条件判定を掛け算で表現できます。

=SUMPRODUCT((A2:A100="東京") * (B2:B100>=1000))
  • 両方 TRUE → 1 × 1 = 1
  • 片方 FALSE → 1 × 0 = 0

つまり掛け算が ANDになり、合計が「条件に合う件数」になります。

金額を合計するなら、値の範囲を掛けます。

=SUMPRODUCT((A2:A100="東京") * (B2:B100>=1000) * C2:C100)

条件に合う行だけ 1 × 金額、合わない行は 0 × 金額 = 0 になり、合計されます。

同様に、足し算が OR になります。

=SUMPRODUCT(((A2:A100="東京") + (A2:A100="大阪")) * C2:C100)

括弧を忘れないでください

+ より * が先に計算されるため、括弧がないと意図が変わります。

SUMIFSで書けるなら、そちらを使う

上の例は SUMIFS でも書けます。

=SUMIFS(C:C, A:A, "東京", B:B, ">=1000")

読みやすさでは SUMIFS が上です

処理も軽い。書けるならSUMIFSを使ってください。

SUMPRODUCTを使うべきなのは、SUMIFSでは書けない場合だけです。

SUMIFSでは書けない集計

1. 条件に計算が入る

「単価×数量が1000以上の行」のように、条件式の中に計算がある場合。

=SUMPRODUCT((A2:A100 * B2:B100 >= 1000) * 1)

SUMIFS の条件は文字列で書くため、こうした計算を含められません。

2. 月ごとの集計を関数で導く

=SUMPRODUCT((MONTH(A2:A100)=4) * C2:C100)

日付から月を取り出して判定しています。SUMIFS では期間の上限下限で表現する必要がありますが、SUMPRODUCTなら直接書けます。

3. 重複を除いた件数

=SUMPRODUCT(1/COUNTIF(A2:A100, A2:A100))

同じ値がn個あれば 1/n がn回足されて1になる、という仕組みです。

範囲に空欄があると #DIV/0! になります

空欄のない範囲に限定するか、次のように書きます。

=SUMPRODUCT((A2:A100<>"") / COUNTIF(A2:A100, A2:A100 & ""))

スプレッドシートなら UNIQUE のほうが簡単です。

=COUNTA(UNIQUE(FILTER(A2:A100, A2:A100<>"")))

4. 部分一致での集計

=SUMPRODUCT(ISNUMBER(SEARCH("営業", B2:B100)) * C2:C100)

SUMIF のワイルドカードでも書けますが、複数の条件と組み合わせるならこちらが素直です。

5. 加重平均

=SUMPRODUCT(A2:A100, B2:B100) / SUM(B2:B100)

「単価 × 数量の合計 ÷ 数量の合計」=加重平均単価です。AVERAGE では出せません。

注意点

範囲の大きさを揃える

すべての範囲が同じ行数でなければ #VALUE! になります。列全体(A:A)と A2:A100 を混ぜないでください。

文字列が混ざると #VALUE!

掛け算の対象に文字列があるとエラーになります。条件式で包むか、-- で数値化してください。

=SUMPRODUCT(--(A2:A100="東京"))

-- は「マイナスを2回かける」ことで TRUE/FALSE を1/0に変換する定番の書き方です。* 1 でも同じです。

動作が重い

SUMPRODUCTは範囲全体を計算します。列全体を指定して何本も置くと重くなります。範囲を実際に使う分だけに限定してください。

Excelとの違い

書式・挙動ともに共通です。-- による数値化も同じように使えます。

Excelでは古くから「配列数式の代わり」としてSUMPRODUCTが多用されてきましたが、現在は SUMIFS や FILTER で書けることが増えています。

スプレッドシートでは QUERY FILTER ARRAYFORMULA があるため、SUMPRODUCTの出番はさらに少なくなります。

=SUM(FILTER(C2:C100, A2:A100="東京", B2:B100>=1000))

こちらのほうが読みやすい場面が多いので、まずこちらを検討してください。


作業列を作らずに済ませる

単価と数量から売上を求める場合、通常は作業列を作ります。各行で掛け算をして、最後にその列を合計する流れです。この方法は分かりやすく、途中の値も確認できるので、実務では十分に有効です。

しかし、作業列を置きたくない場面もあります。表のレイアウトが決まっている、他の人が使うので列を増やしたくない、集計だけを別の場所に出したい。こういう場合に、掛けてから足す関数が使えます。

範囲を二つ渡せば、対応する行同士を掛けて、その合計を返します。作業列は不要です。範囲は三つ以上でも構いません。

注意点として、渡す範囲はすべて同じ行数でなければなりません。片方だけ広げると、エラーになるか、意図しない結果になります。

また、範囲に文字列が含まれていると、掛け算ができずにエラーになる場合があります。空白は零として扱われるので問題ありませんが、文字列が混ざっていないかは確認してください。


条件付きの集計として使う

この関数の本当の価値は、条件付きの集計にあります。条件式を掛け合わせることで、複雑な条件の集計が書けます。

仕組みは、真偽値が内部的に一と零として扱われることを利用しています。条件式を書くと、行ごとに真偽値の並びができます。それを掛け合わせれば、すべての条件を満たす行だけが一になります。さらに集計対象の範囲を掛ければ、条件に合う行の値だけが残り、合計されます。

条件付き集計の専用関数があるのに、なぜこの方法が必要なのか。理由は三つあります。

第一に、専用関数では書けない条件があるためです。条件範囲に対して関数を適用したい場合、専用関数は受け付けません。年を取り出して比較する、文字数で判定する、といった条件はこの方法でしか書けません。

第二に、または条件を扱えるためです。条件を足し合わせれば、どちらかを満たす行が対象になります。

第三に、他の範囲との掛け算を同時に行えるためです。条件に合う行の、単価かける数量の合計、というような集計が一つの数式で書けます。


条件式の書き方に慣れる

条件式の部分は、範囲と値の比較として書きます。ある列全体を特定の値と比べると、行ごとの真偽値が並びます。

複数の条件をかつで結ぶなら掛け算、またはで結ぶなら足し算です。この対応を覚えておけば、条件の組み立てで迷いません。

またはで結ぶ場合は注意が必要です。両方を満たす行では、足した結果が二になります。そのまま集計対象と掛けると、二重に計上されます。ゼロより大きいかを判定して真偽値に戻すか、条件が排他的であることを確認してください。

期間で絞る場合は、開始日以上という条件と終了日以下という条件を掛け合わせます。日付はセルに置いて参照する形が確実です。

条件式に関数を使う場合、その関数が範囲を受け付けるかどうかで挙動が変わります。範囲をそのまま渡せる関数と、一つの値しか受け付けない関数があります。後者を使うと、意図した並びになりません。動作を確認してから組み込んでください。


件数を数える使い方

集計対象の範囲を渡さずに、条件式だけを掛け合わせると、条件を満たす行の件数が返ります。真偽値の一を合計する形になるためです。

これは、条件付きの件数関数では書けない条件を数えたいときに使えます。日付から年を取り出して比較する、文字列の長さで判定する、といった条件です。

また、または条件の件数も、足し算で書けます。ただし重複の扱いには注意してください。

件数と合計を同じ条件で出したい場合、条件式の部分は共通なので、片方をコピーして集計対象を足し引きするだけで済みます。集計表を組み立てる際の手間が減ります。

なお、単純な条件であれば、専用の関数のほうが読みやすくなります。この方法を使うのは、専用関数では書けない条件に限るのが実務的です。


加重平均を実務で使う

単位あたりの値を平均する場面では、加重平均が正解になることがほとんどです。掛けてから足す関数を使えば、一つの数式で書けます。

平均単価を求める場合、単価と数量を掛けた合計を、数量の合計で割ります。店舗ごとの平均単価をさらに平均する方法とは、結果が変わります。販売数の違いが反映されるためです。

達成率の平均も同様です。目標と実績をそれぞれ合計してから割ります。月ごとの達成率を平均すると、規模の違う月が同じ重みで扱われます。

利益率、稼働率、歩留まり。いずれも比率なので、単純平均では実態を表しません。分子と分母をそれぞれ合計してから割り直します。

条件付きの加重平均も書けます。条件式を掛け合わせた上で、値と重みを掛けます。特定の分類だけの加重平均、といった集計ができます。

この違いを知らずに単純平均を報告していると、指摘されたときに説明できません。比率を平均する場面では、必ず重みを考えてください。


二次元の集計に使う

掛けてから足す関数は、行と列の両方に条件がある集計にも使えます。

たとえば、行に商品、列に月が並んだ表があり、特定の商品群の特定の期間だけを合計したい場合。行の条件と列の条件を、それぞれ真偽値の並びとして作り、掛け合わせます。

行の条件は縦に並び、列の条件は横に並びます。この二つを掛けると、行と列の交差する部分だけが一になる二次元の並びができます。これに集計対象の範囲を掛ければ、該当する部分だけが合計されます。

条件付きの集計関数では、この形の集計はできません。条件範囲と集計範囲が同じ形である必要があるためです。

やや高度な使い方ですが、横持ちの表を扱わざるを得ない場面では有効です。データの持ち方を変えられるなら、縦持ちにして条件付きの集計関数を使うほうが読みやすくなります。

いずれにせよ、この関数の本質は「並びを掛け合わせて合計する」ことです。この一点を理解していれば、応用は自分で組み立てられます。

数式を書く前の手順

手順を分けると、どこで詰まっているかが分かります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

空欄と0の扱いが結果を左右します。未入力を0で埋めると平均が下がります。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

条件の数で使う関数が変わります。将来増えるなら複数条件に対応する形にしてください。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

以下は、どの関数を使っていても同じです。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

「集計」の関数を全体から見る

集計に含まれる関数を、全体から見ておきます。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに48本あります。

記事
ABS
AGGREGATE
AVERAGE
AVERAGEIF
AVERAGEIFS
CEILING
CORREL
COUNT
COUNTA
COUNTBLANK
COUNTIF
COUNTIFS
COUNTUNIQUE
FLOOR
GEOMEAN
INT
LARGE
MAX
MAXIFS
MEDIAN
MIN
MINIFS
MOD
MODE
PERCENTILE
POWER
PRODUCT
QUARTILE
QUOTIENT
RAND
RANDBETWEEN
RANK
ROUND
ROUNDDOWN
ROUNDUP
SIGN
SMALL
SPARKLINE
SQRT
STDEV
SUBTOTAL
SUM
SUMIF
SUMIFS
SUMSQ
TRIMMEAN
TRUNC
VAR

このカテゴリで共通するつまずき

空欄と0の扱いが結果を左右します。未入力を0で埋めると平均が下がります。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

条件の数で使う関数が変わります。将来増えるなら複数条件に対応する形にしてください。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


このサイトの収録状況

全201本を、次のカテゴリに分けて収録しています。

カテゴリ記事数
目的別51本
集計47本 ←この記事
文字列31本
日付19本
検索・参照15本
条件15本
機能12本
配列・抽出10本
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


よくある質問

Q. エラーになります

範囲の行数が揃っていないか、文字列が混ざっています。範囲を確認してください。

Q. 条件付き集計の専用関数とどちらを使うべきですか

単純な条件なら専用関数のほうが読みやすくなります。専用関数で書けない条件のときだけ、この方法を使ってください。

Q. または条件で数が合いません

両方を満たす行が二重に数えられています。ゼロより大きいかを判定して真偽値に戻してください。

Q. 文字列が混ざるとエラーになります

掛け算ができないためです。条件式で除外するか、対象範囲を数値だけにしてください。

Q. 範囲は何個まで渡せますか

実用上、困らない数を渡せます。ただし多いと読みにくくなります。

Q. 空白セルはどう扱われますか

零として扱われます。合計には影響しません。

Q. 加重平均を出せますか

出せます。値と重みを掛けた合計を、重みの合計で割ってください。

Q. 重くなることはありますか

範囲を列全体で指定すると負荷がかかります。データのある範囲に絞ってください。




この分野の他の記事

同じ「集計」の記事です。目的が近いので、こちらで解決しない場合はこちらも見てください。

まとめ

  • 書式は =SUMPRODUCT(範囲1, 範囲2)。掛けて足す
  • 掛け算が AND、足し算が OR になる
  • SUMIFS で書けるなら、SUMIFSのほうが読みやすく軽い
  • 出番は「条件に計算が入る」「加重平均」など、SUMIFSで書けない場合
  • 範囲の大きさは必ず揃える
  • スプレッドシートなら FILTER や QUERY で代替できることが多い

関連する関数