この記事で分かること

  • SUMPRODUCT関数の構文と「配列の要素同士を掛けて合計する(内積)」という本質
  • 加重平均(WACC・加重平均金利・加重平均残存年数・加重平均取得単価)を1セルで出す書き方
  • 条件付き集計での —(ダブルマイナス)の意味と、SUMIFSとの使い分け・OR条件の作り方
  • 財務モデルで最も効く使い方=「期間フラグ行 × キャッシュフロー行」の内積と、その監査・高速化の作法

結論:SUMPRODUCTは「配列の内積」を1セルで返す関数

SUMPRODUCT関数は、複数の配列(範囲)の対応する要素同士を掛け合わせ、その総和を返す関数です。数学でいう内積(ドット積)そのもので、財務実務では「加重平均」「条件付き集計」「期間フラグを使った区間合計」という3つの用途に集約されます。

=SUMPRODUCT(配列1, [配列2], [配列3], …)
配列1の1番目 × 配列2の1番目 + 配列1の2番目 × 配列2の2番目 + … を計算して合計値を返します。引数が1つだけの場合は、その範囲の単純合計(SUMと同じ)になります。

SUMPRODUCTが投資銀行・PE・FAS・FP&Aの現場で長く使われてきた理由は、次の3点です。

  • 加重平均が1セルで完結する:=SUMPRODUCT(重み, 値)/SUM(重み) という定型で、WACC・加重平均金利・加重平均倍率がすべて同じ形で書けます。作業列(掛け算用の補助列)が不要になります。
  • 条件を数式で書ける:SUMIFSの条件は文字列で指定しますが、SUMPRODUCTは (条件範囲=条件) という論理式そのものを掛け算に使えるため、関数を挟んだ条件(年・月の抽出など)も表現できます。
  • 配列演算がCtrl+Shift+Enter不要:動的配列が普及する以前から、SUMPRODUCTだけは通常入力で配列計算ができました。この歴史的な事情が、既存モデルにSUMPRODUCTが大量に残っている理由でもあります。

本記事は、この関数を「財務モデルの部品」として使い切るための実務ガイドです。関数全体の位置づけや他の頻出関数との関係はExcel関数の早見辞典|財務モデリング頻出関数リファレンスを、用語としての短い定義は用語集のSUMPRODUCT関数を参照してください。以下の数値例はすべて説明用の仮設例です。

基本動作:数量×単価の合計を作業列なしで出す

最も素直な使い方は、数量と単価の掛け算の合計です。以下の仮設例で確認します。

品目(行)数量(B列)単価(C列・円)金額(円)
A(2行目)121,50018,000
B(3行目)82,40019,200
C(4行目)2598024,500
D(5行目)512,00060,000
合計——121,700
説明用の仮設例。=SUMPRODUCT(B2:B5, C2:C5) は 18,000+19,200+24,500+60,000=121,700 を返します。

カンマ区切りとアスタリスクの違い

同じ結果は =SUMPRODUCT(B2:B5*C2:C5) とも書けますが、両者は挙動が違います。この差は後述のエラー対応に直結するので、最初に押さえてください。

観点カンマ区切り SUMPRODUCT(A, B)アスタリスク SUMPRODUCT(A*B)
文字列・空白セルの扱い0とみなして計算を続行#VALUE! エラー
範囲サイズが違うとき#VALUE! エラー行×列の組み合わせに展開されることがある
論理値(TRUE/FALSE)数値化されず0扱い。-- が必要掛け算により自動で1/0に変換される
向いている用途加重平均・フラグ×CFなど「汚れたデータでも止めたくない」計算条件付き集計(論理式を掛ける書き方)

自分で作った整った行ではどちらでも構いませんが、外部から取り込んだ生データではカンマ区切りのほうが止まりにくい一方、文字列混入を静かに0として飲み込む副作用があります。

加重平均:WACC・加重平均金利・加重平均残存年数

実務で最も使用頻度が高いのが加重平均です。定型は次の1本だけです。

加重平均 = SUMPRODUCT(重み範囲, 値範囲) ÷ SUM(重み範囲)
重みの合計で割るのを忘れると「重み付き合計」になってしまいます。重みが構成比(合計100%)であれば =SUMPRODUCT(構成比, 値) だけで加重平均になります。

(1) 加重平均金利と加重平均残存年数

デットの各トランシェについて、残高・金利・残存年数が並んでいる状況を考えます(説明用の仮設例)。

トランシェ残高(百万円)金利残存年数残高×金利
Term Loan A4,0001.80%5.0年72.0
Term Loan B2,5002.60%7.0年65.0
社債3,0003.10%10.0年93.0
リボルバー5001.40%1.0年7.0
合計・加重平均10,0002.37%6.80年237.0
加重平均金利=237.0÷10,000=2.37%。加重平均残存年数=(4,000×5+2,500×7+3,000×10+500×1)÷10,000=68,000÷10,000=6.80年。

ここで単純平均を取ると、金利は (1.80+2.60+3.10+1.40)÷4=2.23%、残存年数は (5+7+10+1)÷4=5.75年となり、いずれも実態からずれます。残高500百万円のリボルバーと3,000百万円の社債を同じ重みで扱ってしまうためです。「平均」と書かれた行を見たら、まず加重か単純かを確認します。これはモデルレビューの基本動作です。

加重平均金利:=SUMPRODUCT(残高範囲, 金利範囲)/SUM(残高範囲)
加重平均残存年数:=SUMPRODUCT(残高範囲, 残存年数範囲)/SUM(残高範囲)
分母が0になり得る場合は =IF(SUM(残高範囲)=0, 0, SUMPRODUCT(…)/SUM(…)) のようにゼロ除算を潰します。返済が進んで残高が0になる期で #DIV/0! が出るのは、デットスケジュールでよくある事故です。

(2) WACC(加重平均資本コスト)

WACCも構造は同じです。株主資本7,000百万円・株主資本コスト8.50%、有利子負債3,000百万円・税引前負債コスト2.50%、実効税率30%とすると、税引後負債コストは 2.50%×(1−30%)=1.75% です。

WACC = SUMPRODUCT(時価範囲, コスト範囲) ÷ SUM(時価範囲)
= (7,000×8.50% + 3,000×1.75%) ÷ 10,000 = (595.0+52.5) ÷ 10,000 = 6.48%(小数第3位四捨五入)

資本構成の項目が2つ(負債・株主資本)だけならセル参照を直接書いても同じですが、優先株式・ハイブリッド証券・複数通貨建て負債など項目が増えるほど、SUMPRODUCT形式は行を1本足すだけで済むという利点が効いてきます。株主資本コストの推計(CAPM)やβの取り扱い、資本構成を時価で取るか簿価で取るかといった論点はWACCの計算方法|CAPM・資本構成・βの取り扱いを設例で理解する、定義は用語集の資本資産評価モデル(CAPM)を参照してください。

(3) 加重平均取得単価

買い増しを繰り返した持分の平均取得単価も同じ形です。1回目10,000株@1,250円、2回目6,000株@1,480円、3回目4,000株@1,120円なら、

SUMPRODUCT(株数, 単価) = 12,500,000+8,880,000+4,480,000 = 25,860,000円、SUM(株数) = 20,000株、よって加重平均取得単価は1,293円です。単純平均の (1,250+1,480+1,120)÷3=1,283円 とは10円ずれます。

条件付き集計:-- の意味とSUMIFSとの使い分け

次の仮設データ(2行目〜7行目)で、条件付き集計を確認します。

行B列:セグメントC列:地域D列:売上(百万円)
2産業機械国内1,200
3産業機械海外800
4電子部品国内950
5電子部品海外1,450
6産業機械国内640
7サービス海外380
数式意味結果
=SUMPRODUCT((B2:B7="産業機械")*(C2:C7="国内")*D2:D7)産業機械 かつ 国内(AND条件)1,840
=SUMIFS(D2:D7,B2:B7,"産業機械",C2:C7,"国内")同じ集計をSUMIFSで1,840
=SUMPRODUCT(((B2:B7="電子部品")+(B2:B7="サービス"))*(C2:C7="海外")*D2:D7)海外 かつ(電子部品 または サービス)1,830
=SUMPRODUCT(--(D2:D7>=1000))売上1,000百万円以上の件数2
=SUMPRODUCT((C2:C7="国内")*1)国内の件数(*1でも同じ)3
AND条件は1,200+640=1,840。OR条件は1,450(電子部品・海外)+380(サービス・海外)=1,830。

ダブルマイナス -- は何をしているか

(D2:D7>=1000) が返すのは TRUE / FALSE の配列です。SUMPRODUCTは論理値をそのままでは数値として合計しません。引数が1つだけで掛け算が発生しない場合、結果は0になります。そこで、マイナスを2回適用して TRUE→−1→1、FALSE→0→0 と数値化するのが -- の役割です。*1 や +0、N() でも同じことができますが、慣例として -- が最も広く使われています。

逆に、(条件)*(条件)*金額範囲 のように掛け算が入っている式では、掛け算の時点で論理値が自動的に1/0へ変換されるため -- は不要です。「常に -- を付ける」でも動きますが、なぜ付いているのか説明できないまま貼り付けるのは避けたいところです。

SUMIFSとSUMPRODUCTの使い分け

観点SUMIFSSUMPRODUCT
AND条件標準機能。読みやすい条件を掛ける。式が長くなる
OR条件SUMIFSを複数足す/配列定数を使う条件を + でつなぐ(重複行の二重計上に注意)
条件に関数を使う不可。日付は開始日・終了日で挟む可能。(YEAR(日付範囲)=2026) などが書ける
加重平均・内積不可(作業列が必要)得意分野
大量データでの速度速い(内部で最適化されている)遅くなりやすい(配列全体を評価)
範囲サイズ不一致エラーにならず誤集計になることがある#VALUE! で止まるため気づける

実務上の判断はシンプルです。純粋な条件付き合計はSUMIFS、掛け算が絡む集計や関数を条件に使う集計はSUMPRODUCT。月次実績を勘定科目×期間で拾うような定型集計はSUMIFSのほうが読みやすく速いので、SUMIFS関数の使い方|財務モデル・予算管理で使える実務例と用語集の期間集計とSUMIFSを併せて確認してください。

なお、OR条件を + で書くときは注意が必要です。上の例では「電子部品」と「サービス」は排他なので問題ありませんが、両方の条件を同時に満たす行が存在すると、その行の論理値の和が2になり金額が2倍で計上されます。条件が排他かどうかを必ず確認してください。

財務モデルの本命:期間フラグ × キャッシュフローの内積

SUMPRODUCTが最も威力を発揮するのは、プロジェクトファイナンスやLBOのように横に期間が並ぶモデルです。モデルの上部に「建設期間フラグ」「運営期間フラグ」「返済期間フラグ」といった0/1の行(タイムラインフラグ)を置き、それをキャッシュフロー行と掛け合わせて特定区間だけを合計します。

以下は説明用の仮設例です。2026年から2033年までの8期のプロジェクトで、2026〜2027年が建設期間、2028〜2033年が運営期間とします。

期間フラグ × CF行 の内積 = SUMPRODUCT 年度 2026 2027 2028 2029 2030 2031 2032 2033 CF(百万円) -1,800 -1,200 780 800 820 840 850 860 運営フラグ 0 0 1 1 1 1 1 1 列ごとに掛け算(要素ごとの積) 積 0 0 780 800 820 840 850 860 建設期はフラグ0 → 積も0 =SUMPRODUCT(運営フラグ行, CF行) → 4,950
図:運営期間フラグ(0/1)とCF行の内積。780+800+820+840+850+860=4,950百万円。建設期フラグに差し替えれば −1,800+(−1,200)=−3,000百万円が返ります(説明用の仮設例)。

この書き方の価値は、期間の定義を変えても数式を書き換えなくてよいことにあります。運転開始が1年遅れてフラグ行が右にずれても、数式はそのままで結果だけが追随します。SUM関数の範囲を手で指定する方法では、期間が変わるたびに数式修正と再検証が必要です。フラグ行の設計は用語集のタイムラインとフラグ行を参照してください。

割引係数との内積=NPVを自分で組む

同じ発想で、CF行と割引係数行を掛ければNPVになります。割引率6.0%、期首を0期として1期目から8期目まで期末発生とすると、割引係数は 1/(1.06)^n です。

NPV = SUMPRODUCT(CF行, 割引係数行)
上記の設例では 約832百万円(−1,800×0.9434 + −1,200×0.8900 + 780×0.8396 + 800×0.7921 + 820×0.7473 + 840×0.7050 + 850×0.6651 + 860×0.6274)。同じ並びなら =NPV(6%, CF行) でも同額になります。

割引係数行を明示的に置くのは遠回りに見えて実務的な意味があります。行として見えていればレビュー担当者は「何期を何%で割り引いたか」を数式を開かずに確認でき、期中割引(mid-year convention)への修正も割引係数行だけで完結します。関数側の落とし穴についてはNPV・IRR・XIRR関数の実践|Excelでの正しい使い方と3つの罠、モデル全体の組み立てはプロジェクトファイナンスモデルの作り方|収益・CFADS・借入・DSCRをExcelで統合で扱っています。用語としてのNPVは正味現在価値を参照してください。

デットスケジュールでの使いどころ

返済スケジュールでも、フラグとの内積は繰り返し登場します。典型は次の3つです。

  • 据置期間の除外:=SUMPRODUCT(返済期間フラグ行, 元本返済行) で、据置(グレースピリオド)を除いた累計返済額を出す。
  • トランシェ別の支払利息合計:期首残高行と金利行の内積で、期ごとの利息を1行に集約する。
  • コベナンツ判定期間の集計:テスト対象となる直近4四半期だけをフラグで立て、CFADSやEBITDAをその区間で合計する。

バリュエーションとポートフォリオ管理での加重平均

加重平均マルチプル

類似会社比較法(Comps)では通常、中央値と平均値を並べて提示します。これに加えて「規模で加重した平均倍率」を見たい場面(たとえば対象会社が業界の大手に近い場合や、ポートフォリオ全体の平均倍率を語りたい場合)にSUMPRODUCTが使われます。

類似会社EBITDA(百万円)EV/EBITDAEBITDA×倍率
A社12,0009.5x114,000
B社6,00011.2x67,200
C社25,0008.1x202,500
D社3,00013.4x40,200
合計46,000—423,900
EBITDA加重平均=423,900÷46,000=9.22x。単純平均は10.55x、中央値は10.35x(いずれも説明用の仮設例)。

単純平均10.55xとEBITDA加重9.22xの差1.33xは、最大手C社の低い倍率が加重では強く効くことから生じます。どの統計量を使うかで結論が変わるため、Compsの提示では中央値・単純平均・加重平均の定義を明記すべきです。Compsの作成手順そのものはEV/EBITDA倍率と類似会社比較法|Comps作成の5ステップ、指標の定義は用語集のEV/EBITDA倍率で確認してください。

加重平均リターンとIRRの違い

PEファンドのポートフォリオで、投資額とMOIC(投下資本倍率)が並んでいる場合を考えます(仮設例)。

投資先投資額(百万円)MOIC回収額(百万円)
A3,0002.4x7,200
B5,0001.6x8,000
C1,5003.8x5,700
D2,5000.4x1,000
E8,0001.9x15,200
合計・加重平均20,0001.86x37,100
投資額加重MOIC=37,100÷20,000=1.855x(1.86x)。単純平均MOICは2.02xとなり、実態を過大評価します。

単純平均2.02xがずれるのは、投資額1,500百万円のC社(3.8x)と8,000百万円のE社(1.9x)を同じ重みで扱うからです。=SUMPRODUCT(投資額範囲, MOIC範囲)/SUM(投資額範囲) で得られる1.86xは、回収総額37,100を投資総額20,000で割ったグロスMOICと必ず一致します。この一致が検算になります。

一方で、IRRは加重平均できません。IRRは時間の関数であり、投資額で重み付けした平均は理論的に意味を持ちません。ポートフォリオ全体のIRRを出したい場合は、各投資のキャッシュフローを日付ごとに合算したうえでXIRRを1回適用します。「SUMPRODUCTで加重平均IRRを出した」という資料を見たら、まずここを疑ってください。

動的配列時代にSUMPRODUCTを使う理由

Microsoft 365のExcelでは動的配列が標準になり、=SUM((B2:B7="産業機械")*(C2:C7="国内")*D2:D7) のような式もCtrl+Shift+Enterなしで動きます。では、SUMPRODUCTはもう不要かというと、そうではありません。

  • 互換性:Excel 2019以前や配布先の環境では動的配列が使えないことがあり、SUM版の式は暗黙の交差やCSE未入力により誤った単一値を返す危険があります。SUMPRODUCTはバージョンを問わず同じ挙動をします。
  • 意図の明示:SUMPRODUCTと書かれていれば、読み手は「ここは配列演算だ」と即座に理解します。SUMだと単純合計との区別がつきにくくなります。
  • スピルの副作用がない:SUMPRODUCTは常に単一値を返すため、セルの下や右にスピルして既存の行を壊す心配がありません。

逆に、FILTER・UNIQUE・SORTなどで中間結果を可視化したいときは動的配列のほうが優れています。詳しくはExcel動的配列関数の実務|FILTER・SORT・UNIQUE・スピルで財務分析を速くすると用語集の動的配列関数を参照してください。また、シナリオ切替のようにフラグや選択肢を扱う場面ではCHOOSE関数と組み合わせるのが定石です。

パフォーマンスと「監査しやすい書き方」

重くなる原因は範囲の取りすぎ

SUMPRODUCTは指定された配列全体を評価します。Excelのワークシートは1,048,576行×16,384列あるため、=SUMPRODUCT((A:A="国内")*(D:D)) のように列全体を参照すると、実データが数百行でも100万行分の配列を毎回計算します。これがSUMPRODUCTが「重い関数」と言われる主因です。

  • 範囲は実データの行数に限定します。行が増減するなら、列全体ではなくテーブル(構造化参照)を使います。
  • 同じ条件式を何百セルにもコピーしません。共通部分は1回だけ計算し、結果を参照します。
  • 純粋な条件付き合計はSUMIFS・COUNTIFSに寄せ、SUMPRODUCTは掛け算が必要な箇所だけに使います。

それでも再計算が重い場合の切り分けは重い財務モデルの高速化|再計算を遅くする犯人と処方箋で扱っています。

後から読む人のための書き方

  • 分母を別セルに出す:SUM(重み) を独立したセルに置くと、ゼロ除算の検知が容易になり、重みの合計が想定どおりかも一目で分かります。
  • フラグ行を隠さない:0/1のフラグ行は非表示にせず、モデル上部にまとめて配置します。SUMPRODUCTの結果が想定と違うとき、最初に見るべきはフラグ行です。
  • 範囲は固定する:横方向にコピーする式では、フラグ行やCF行の行番号を絶対参照($)で固定します。範囲がずれても#VALUE!にならず静かに誤集計する組み合わせがあるためです。
  • F9で部分評価する:数式バーで (B2:B7="産業機械") の部分だけ選択してF9を押すと、TRUE/FALSEの配列がその場で展開されます。条件が意図どおり効いているかを確認する最短経路です。この手法はExcelの数式監査の技術|F2・F9・数式表示・トレースで他人のモデルを読み解くで詳述しています。

よくある間違いと対処法

症状原因対処
#VALUE! が返る配列のサイズ(行数・列数)が一致していない各引数の範囲を数式バーで選択し、行数を揃える。行追加時にずれた範囲を疑う
#VALUE! が返る(サイズは同じ)アスタリスク形式で文字列・エラー値が混入カンマ区切りに変える、または元データを数値化する(ISNUMBERで混入行を特定)
結果が必ず0になる論理値の配列を1つだけ渡している-- または *1 で数値化する
金額が想定の2倍になるOR条件を + で書き、両条件を満たす行があった条件が排他か確認し、必要なら (条件1+条件2>0)*1 の形にする
加重平均が単純平均と一致してしまうSUM(重み)で割り忘れ、または重みが全て同じ分母セルを独立させ、重みの合計と構成比を目視確認する
#DIV/0! が特定の期だけ出るその期の重み合計(残高等)が0IFでゼロ除算を回避。0を返すか空欄にするかはモデル方針で統一する
合計が過小になる(エラーは出ない)カンマ区切りで文字列が0扱いされているCOUNT と COUNTA の差で非数値セルの件数を確認する

最後の項目は特に厄介で、エラーが出ないまま月次の差異として後から表面化します。生データを集計する前に =COUNTA(範囲)-COUNT(範囲) をチェックセルとして置くのが簡単な予防策です。

よくある質問(FAQ)

SUMPRODUCTとSUMIFS、どちらを標準にすべきですか。

条件付き合計だけならSUMIFSを標準にしてください。読みやすく、大量データでも速いためです。SUMPRODUCTは「掛け算が必要な集計(加重平均・フラグ×CF)」と「条件に関数を使う集計(YEAR/MONTH等)」に限定すると、モデル全体の可読性が保たれます。

-- は常に付けたほうがよいですか。

いいえ。掛け算が入る式では不要です。=SUMPRODUCT((A範囲="X")*(B範囲)) のように掛け算があれば論理値は自動で1/0に変換されます。-- が必要なのは、論理値の配列を単独で渡して件数を数えるときです。不要な -- は誤りではありませんが、式が読みにくくなります。

SUM関数で =SUM(フラグ行*CF行) と書くのと何が違いますか。

Microsoft 365では結果は同じです。違いは互換性と意図の伝わりやすさです。動的配列が使えない環境ではSUM版はCtrl+Shift+Enterが必要で、通常入力すると誤った値を返す場合があります。外部に配布するモデルではSUMPRODUCTのほうが安全です。

加重平均IRRをSUMPRODUCTで計算してよいですか。

適切ではありません。IRRは期間構造に依存するため、投資額で加重平均しても意味を持ちません。ポートフォリオIRRは各案件のCFを日付ベースで合算してからXIRRを1回適用します。SUMPRODUCTで加重平均できるのは、MOICや倍率のように「金額の比」で表せる指標です。

3つ以上の配列を掛けられますか。

可能です。=SUMPRODUCT(数量, 単価, 為替レート) のように並べれば、要素ごとに全部を掛けた総和が返ります。ただし引数が増えるほど検算が難しくなるため、3つを超える場合は中間行を作って2段階に分けるほうが監査に耐えます。

まとめ

SUMPRODUCTは「配列の要素同士を掛けて合計する」という単純な関数ですが、財務実務ではこれが加重平均・条件付き集計・区間集計という3つの頻出作業をすべてカバーします。加重平均は =SUMPRODUCT(重み, 値)/SUM(重み) の一本槍で、WACCも加重平均金利も加重平均マルチプルも同じ形で書けます。

財務モデルにおける最大の価値は、期間フラグ行との内積です。フラグの定義さえ正しければ、期間の前提が変わっても数式を書き換えずに結果が追随します。一方で、列全体参照によるパフォーマンス劣化、論理値の扱い、OR条件の二重計上、文字列混入の静かな0扱いといった落とし穴も明確です。範囲を絞り、分母を独立させ、フラグ行を見える場所に置きます。この3つを守れば、SUMPRODUCTは強力かつ監査可能な部品になります。

出典・参考(2026年8月21日確認)

  • Microsoft「SUMPRODUCT 関数」(Microsoft 365 / Excel 関数リファレンス)— 構文、配列サイズ不一致時の #VALUE!、配列内の非数値要素を0として扱う仕様
  • Microsoft「SUMIFS 関数」(Microsoft 365 / Excel 関数リファレンス)— 条件指定の形式と複数条件(AND)の扱い
  • Microsoft「動的配列数式とスピル配列の動作」(Microsoft 365 サポート)— 従来のCtrl+Shift+Enter配列数式との差異、スピルの挙動
  • Microsoft「Excel の仕様および制限」(Microsoft 365 サポート)— ワークシートの最大行数1,048,576行・最大列数16,384列

※本記事は教育目的の一般的な解説であり、法務・税務・投資助言ではありません。設例は理解のための仮設例です。