🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excelの加重平均 — SUMPRODUCT ÷ SUM(そして「平均の平均」が嘘をつく理由)

|

Excelの加重平均 — SUMPRODUCT ÷ SUM(そして「平均の平均」が嘘をつく理由)

要点 — Excel に WEIGHTEDAVG 関数はありません。定石は =SUMPRODUCT(values, weights)/SUM(weights) です。SUMPRODUCT が各値をその重みで 掛けて足し(加重合計)、SUM(weights) で割ることで、その合計を1単位あたりの平均に 戻します。数字が異なる重要度を帯びるときにはいつでも必要です——単位数で重みづけした 成績、販売数量で重みづけした価格、投資額で重みづけしたリターン。これが直す誤りは、平均に まつわる最もありふれた間違いです。それぞれが違う規模のグループを要約している数字を 素の AVERAGE にかけ、小さなグループと巨大なグループに同じ発言権を与え、自信満々に 間違った数字を出す——という間違いです。

=SUMPRODUCT(B2:B10, C2:C10)/SUM(C2:C10)   ' 値はB列、重みはC列
=SUMPRODUCT(Scores, Credits)/SUM(Credits) ' GPA: 成績を単位数で重みづけ
=SUMPRODUCT(B2:B10, C2:C10)               ' 重みの合計がすでに1のときだけの短縮形

「加重平均 Excel」で上位に出るページの多くは、=SUMPRODUCT(...)/SUM(...) と GPA の 計算例を渡して、それで終わりです。でも数式は、はじめから難しい部分ではありませんでした ——1分で覚えられます。難しいのは、素の平均が静かに間違っていて加重平均が必要になるのは いつか、そして両者が正反対の物語を語るほど大きく食い違うのはなぜか、を知ることです。 その判断こそがレポートを救うので、本記事はまずそこから始めます。

この記事で学べること

  • 考え方の軸:重みとは、各値が持つ「票」の数
  • なぜ数式が SUMPRODUCT ÷ SUM なのか、項ごとに
  • 中核の誤り:グループの要約値の AVERAGE が間違う理由
  • 重みがすでに 1(または 100%)に合計されるときの短縮形
  • 実務パターン:GPA、ポートフォリオ・リターン、混合単価
  • 落とし穴:範囲の中の文字列、長さの不一致、そして条件付き加重平均

考え方の軸:重みは票

素の平均は、どの値にも1票を与えます。加重平均は、各値に重みに比例した票を投じさせます ——数量、人数、金額、単位数。重み 10 の値は、重み 1 の値の10倍の力で結果を引っ張ります。 アイデアはこれで全部。あとはすべて、票を正しく足し上げるための帳簿づけです。

帳簿づけは2ステップです。まず、各値をその重みで掛けて足す——これが SUMPRODUCT(values, weights)、「影響力」の合計です。次に、票の総数 SUM(weights) で割り、 1つの値と同じスケールに戻します。この2つ目を飛ばすと、手元にあるのは加重平均ではなく 加重合計です——データが増えただけで大きくなる数字で、望みどおりであることはめったに ありません。

なぜ SUM(weights) で割るのか

算術を一度は見ておく価値があります。あとで出てくるすべての変形を説明してくれるからです。 3件の購入を考えます。単価 10 で 2個、単価 20 で 3個、単価 30 で 5個。顧客が実際に払った 平均単価は (10+20+30)/3 = 20 ではありません——それは各価格で1個ずつ買ったかのように 扱っています。正しくは、総額を総数量で割ったものです。

' 単価は B2:B4 = 10, 20, 30   |   数量は C2:C4 = 2, 3, 5
=SUMPRODUCT(B2:B4, C2:C4)   ' -> 20 + 60 + 150 = 230   (支払総額)
=SUM(C2:C4)                 ' -> 2 + 3 + 5    = 10      (購入総数)
=SUMPRODUCT(B2:B4,C2:C4)/SUM(C2:C4)  ' -> 230 ÷ 10 = 23  (混合単価)

素の平均は 20、加重平均は 23 です。高い価格でより多くの個数が売れたからです。 SUMPRODUCT が分子(金額)を作り、SUM が分母(数量)を作り、その商が実際に発生した 1個あたりの単価になります。あらゆる加重平均は、この同じ「金額 ÷ 数量」の形をしています。 「金額」と「数量」がその時々で何であろうと、です。

中核の誤り:平均の平均

これこそ加重平均が存在する理由となっている間違いで、いたるところにあります。3つの地域が それぞれ平均注文額を報告していて、あなたは全社平均が欲しいとします。

' 地域別平均は B: 50, 40, 90   |   注文件数は C: 300, 250, 3
=AVERAGE(B2:B4)                       ' -> 60    (誤り: 各地域を等しく数える)
=SUMPRODUCT(B2:B4, C2:C4)/SUM(C2:C4)  ' -> 45.6  (正しい: 注文件数で重みづけ)

素の AVERAGE60 と言います。ですが一方の地域には注文が3件、もう一方には 300件あり、素の平均は両者に同じ重みを与えます——注文3件の外れ値が、ほとんど何の 裏づけもないのに全社の数字を14ポイントも吊り上げるのです。加重平均 45.6 は、注文が 実際にどこにあるかを映します。すでに平均(あるいは割合、1単位あたりの数字)である、 規模の違うグループの数字を平均している——そう気づいたときはいつでも、素の AVERAGE は まず間違った道具です。こう問いましょう:これらの数字は、それぞれ違う大きさの元データの 山を代表しているか? もしそうなら、重みをつけます。

短縮形:重みがすでに1に合計されるとき

重みがすでに 1(または 100%)に合計される割合なら——資産配分、採点ルーブリック、 確率分布——SUM(weights)1 で、それで割っても何も変わりません。分母を落とせます。

' C の重みはすでに 100% に合計される: 0.5, 0.3, 0.2
=SUMPRODUCT(B2:B4, C2:C4)   ' -> そのまま加重平均。÷ は不要

これはポートフォリオ・リターンや加重スコアカードで見かける形です。ひとつ注意:重みが 本当に 1 に合計されるときだけ有効です。丸め誤差が紛れて 0.99 になっていると、素の SUMPRODUCT は静かにずれます。/SUM(weights) を残してもコストはゼロで、しかも自己修正 するので、確信がない限りは完全形を使いましょう——完全形が間違うことは決してありません。

覚える価値のある実務パターン

同じ骨組みが、実務のほとんどをカバーします。

' GPA — 成績評点を単位数で重みづけ
=SUMPRODUCT(GradePoints, Credits)/SUM(Credits)

' ポートフォリオ・リターン — 各銘柄のリターンを時価で重みづけ
=SUMPRODUCT(Returns, MarketValues)/SUM(MarketValues)

' 残高の異なるローンをまたいだ混合金利
=SUMPRODUCT(Rates, Balances)/SUM(Balances)

' グループごとの回答者数で重みづけしたアンケート得点
=SUMPRODUCT(GroupScores, Respondents)/SUM(Respondents)

どれも、2つ目の範囲が「この行はどれだけ重要か」の列です。その列に名前を付けられるなら、 加重平均は書けます。

落とし穴:文字列、長さ、条件

SUMPRODUCTAVERAGE ほど寛容ではありません。AVERAGE が文字列を飛ばすのに対し、 SUMPRODUCT はどちらかの範囲に掛けられない文字列が入った瞬間に #VALUE! を返します ——だから先に範囲をきれいにするか、一部のセルがわざと非数値なら IF-- で型変換します。 2つの範囲は同じ長さでなければなりません。高さが食い違うと、掛ける相手がいないので #VALUE! になります。そして重みの列が空、あるいは全部ゼロだと SUM(weights) がゼロに なり、全体が #DIV/0! を返します——可能なら IFERROR で包みます。

条件付きの加重平均——たとえば「West」地域だけ——には、1と0に評価される (condition) 配列として、両方の SUMPRODUCT の中に条件を入れます。

=SUMPRODUCT((Region="West")*Value*Weight)/SUMPRODUCT((Region="West")*Weight)

(Region="West") の項が、分子でも分母でも一致しない行をすべてゼロにするので、West の行 だけが寄与します——これは AVERAGEIFS の加重版の 兄弟です。AVERAGEIFS加重の条件付き平均しかできません。この「条件を配列にする」 技が一般にどう働くかは、SUMPRODUCT ガイド を参照して ください。

ExcelMaster の使いどころ

加重平均の罠は、SUMPRODUCT/SUM を書くことではありません——そもそも加重平均が必要 だったと見抜くことです。地域別平均の列に、もう =AVERAGE(...) と打ち込んでしまった後で。 ExcelMaster に「全地域の平均注文額」を頼めば、各行がそれ自体、異なる注文件数の平均 であると見て取り、加重版を書き、素の平均ならどれだけずれていたかを教えます。「これらの 購入をまたいだ混合単価」や「この成績証明書からの私の GPA」と言えば、正しい値の列と重みの 列をあらかじめ対応づけた =SUMPRODUCT(...)/SUM(...) を組み立てます。

よくある質問

Excel で加重平均を計算するには?

=SUMPRODUCT(values, weights)/SUM(weights) を使います。SUMPRODUCT が各値をその重みで 掛けて積を足し(加重合計)、SUM(weights) で割ることでその合計を1単位あたりの平均に 変えます。たとえば =SUMPRODUCT(B2:B10, C2:C10)/SUM(C2:C10) は、B列の値を C列の量で 重みづけして平均します。

AVERAGE ではだめなのはなぜ?

AVERAGE はどの値にも等しい重みを与えるからです。数字が違う規模のグループを要約して いるとき——地域別平均、1単位あたりの価格、単位数の異なる科目の成績——等しい重みづけは、 小さなグループを巨大なグループと同じだけ数えさせ、誤解を招く結果を生みます。加重平均は、 各値をその規模に比例して数えさせます。

いつも SUM(weights) で割るの?

重みがまだ 1 に合計されないときだけです。重みが 1(または 100%)に合計される割合なら SUM(weights) は 1 で、割り算は何もしないので、=SUMPRODUCT(values, weights) だけで 十分です。迷ったら /SUM(weights) を残してください——常に正しく、重みがぴったり 1 に 合計されなくても自己修正します。

加重平均が #VALUE! や #DIV/0! を返すのはなぜ?

#VALUE! はたいてい、どちらかの範囲に SUMPRODUCT が掛けられない文字列が入っているか、 値と重みの範囲が違う長さであることを意味します——両者はセル単位で一致していなければ なりません。#DIV/0!SUM(weights) がゼロになったこと(空、あるいは全部ゼロの重みの 列)を意味します。範囲をきれいにし、重みが正の数に合計されることを確かめてください。

条件付きで加重平均を出すには?

両方の SUMPRODUCT の中に、条件を配列として入れます: =SUMPRODUCT((Region="West")*Value*Weight)/SUMPRODUCT((Region="West")*Weight)(Region="West") の項は一致する行で 1、それ以外で 0 になるので、分子でも分母でも、 それらの行だけが数えられます。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-27.

関連ガイド: Excel SUMPRODUCT · ExcelのAVERAGE関数 · Excel GEOMEAN・TRIMMEAN・HARMEAN · ExcelのAVERAGEIF & AVERAGEIFS · Excel SUMIFS