Menu

Excelで加重平均を求める方法: SUMPRODUCTの数式

=SUMPRODUCT(B2:B5,C2:C5)/SUM(C2:C5)は加重平均です。各値にその重みを掛け、積を足し、合計を重みの合計で割ります。成績、単位数で重み付けしたGPA、数量で重み付けした価格を例に学びます。

このページのシートはすべて実際に動きます。数値や数式を変えると再計算されます。

=SUMPRODUCT(B2:B5,C2:C5)/SUM(C2:C5)は加重平均を求めます。B列の各点数にC列の重みを掛け、その積を足し、合計を重みの合計で割ります。

重みを付けた科目の成績
F2
ABCDEF
1PartScoreWeightAverageResult
2Homework8520%Weighted81.2
3Quizzes7830%Plain AVERAGE80.75
4Midterm7220%
5Final8830%
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

加重平均の成績は81.2ですが、ふつうのAVERAGEでは80.75になります。AVERAGEは20%の宿題を、30%の期末試験と同じだけ数えてしまうからです。期末試験の点数を変えると、宿題の点数を同じだけ変えたときより加重平均が大きく動きます。

ExcelにはWEIGHTED.AVERAGE関数がないので、SUMPRODUCTをSUMで割るのが定番の数式です。GoogleスプレッドシートにはAVERAGE.WEIGHTED(B2:B5,C2:C5)があります。

加重平均の数式のしくみ

SUMPRODUCTは2つの範囲を行ごとに掛け、結果を足します。作業列で書き出すと、積の列とそのSUMになります:

数式を1ステップずつ
D6
ABCD
1PartScoreWeightScore x weight
2Homework8520%17.0
3Quizzes7830%23.4
4Midterm7220%14.4
5Final8830%26.4
6Total100%81.2
7Weighted average81.2
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

各項目は点数と重みの積を受け持ちます。85 × 20%は17.0、78 × 30%は23.4、という具合です。合計は81.2です。重みの合計が100%なので、ここではC6で割っても何も変わりませんが、そうでないときに数式を正しく保つのはこの割り算です。

重みの合計が100%にならない場合

重みは割合でなくてもかまいません。GPAは単位数で、平均価格は数量で重み付けします。重みのSUMで割れば、合計がいくつでも対応できます。

単位数で重み付けしたGPA
F2
ABCDEF
1CourseGrade pointsCreditsAverageResult
2Math44Weighted GPA3.51
3History33Plain average3.48
4Biology3.74Total credits14
5Art2.72
6Lab41
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

割り算がないと、数式はGPAではなく成績ポイントと単位数の積の合計、ここでは49.2を返します。割り算があれば、F2は14単位で重み付けしたGPAを表示します。4単位の科目は平均をその成績のほうへ引き寄せ、1単位の実験はほとんど動かしません。B6を2に変えて、F3と比べてF2がどれだけ少ししか変わらないかを見てください。

重みが合計ちょうど100%の割合なら、=SUMPRODUCT(B2:B5,C2:C5)だけでも同じ結果になります。それでも/SUM(...)は残しておいてください。いつか重みが変わって合計が105%になったとき、それがない数式は間違った結果を出し、シートのどこにもそれが表れません。

条件付きの加重平均

一部の行だけに重みを付けるには、SUMPRODUCTの中で条件を掛け、一致する重みをSUMIFで足します。下では、地域ごとの平均価格を売れた数量で重み付けしています。

地域別の平均価格
G2
ABCDEFG
1RegionProductPriceQtyRegionAverage price
2NorthApple$1.20100North$1.45
3SouthPear$1.5040South$1.36
4NorthPear$1.5060
5SouthApple$1.20120
6NorthPlum$2.0040
7SouthPlum$2.0020
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

NorthはAppleを100個、Pearを60個、Plumを40個売ったので、平均価格は$1.45です。3つの価格の単純な平均よりもAppleの価格に近くなります。条件(A2:A7=F2)はNorthの行で1、それ以外で0なので、分子にはほかの行が何も加わらず、分母のSUMIFはNorthの数量だけを足します。

練習: 加重平均の価格

やってみよう: 支払った平均価格
F2
ABCDEF
1BatchPriceQtyAverageResult
2Jan$4.20100Weighted price
3Feb$4.5040
4Mar$3.90250
5Apr$4.8010
6May$4.10120
セルをクリックすると数式が見えます。数値や数式を変えると、シートが再計算されます。

やってみよう: 同じ品物を5回に分けて違う価格で買いました。各回の数量で重み付けした、1個あたりの平均価格を計算してください。数式はF2に書きます。

加重平均が間違う原因

  • 積のAVERAGE。 点数 × 重みの列に=AVERAGE(D2:D5)を使うと、重みではなく行数で割るので、小さくて意味のない数になります。積のSUMを重みのSUMで割ってください。
  • 重みではなく件数で割る。 =SUMPRODUCT(B2:B6,C2:C6)/COUNT(B2:B6)が正しいのは、すべての重みが1のときだけです。
  • 範囲がそろっていない。 =SUMPRODUCT(B2:B6,C3:C7)は各値を次の行の重みと組にします。2つの範囲は同じ行で始まり同じ行で終わる必要があります。大きさが違うと#VALUE!が返ります。
  • 重みが空白。 空の重みは0として数えられるので、その行は黙って除かれます。重みがないときに計算を止めたいなら、先に=COUNTBLANK(C2:C6)で確かめてください。
  • 平均の平均。 70点(10人)と90点(30人)の2つのクラスの平均を平均しても80にはなりません。クラスの人数で重み付けすると85になります。AVERAGEIFのページに、条件付きで同じ落とし穴があります。

よくある質問

Excelで加重平均を求めるには?

B列に値、C列に重みを入れ、=SUMPRODUCT(B2:B5,C2:C5)/SUM(C2:C5)を使います。SUMPRODUCTが各値に重みを掛けて結果を足し、重みの合計で割ることで平均になります。

重みの合計は100%でなければいけませんか?

重みのSUMで割るなら、その必要はありません。単位数3、4、2、1や、重み2、1、1でも同じように使えます。割り算をしない近道=SUMPRODUCT(B2:B5,C2:C5)だけは、重みの合計がちょうど100%である必要があります。

ExcelにWEIGHTED.AVERAGE関数はありますか?

ありません。Excelには加重平均の組み込み関数がないので、SUMPRODUCTとSUMの組み合わせが定番の数式です。GoogleスプレッドシートではAVERAGE.WEIGHTED(B2:B5,C2:C5)で同じことができます。

条件付きで加重平均を求めるには?

SUMPRODUCTに条件を加え、重みにはSUMIFを使います:=SUMPRODUCT((A2:A7="North")*B2:B7*C2:C7)/SUMIF(A2:A7,"North",C2:C7)。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める