• ベストアンサー

エクセルで加重平均を求めたい

エクセル2000です。 $D$4:$D$8の数列にR$4:R$8の数列を乗じ、その合計を$D$4:$D$8の数列の和で除して加重平均を求めたいのですが、一応、以下の関数で出来ました。 =ROUND(SUMPRODUCT($D$4:$D$8,R$4:R$8)/SUM($D$4:$D$8),3) 問題は、D列には数値しか入ることがないのでいいのですが、R列の値は、各セルとも数式で求められているものです。数式で求められた値はほとんど数値なのですが、中には「※」とかの文字が出てしまうことがあります。 この場合、加重平均の答えがエラーになってくれればいいのですが、上記式だと「※」等の文字列はゼロと扱われてしまうようです。そうすると答えがおかしくなってしまいます。何かいい方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

No.2です。 >そしてR行に数値以外が表示されたらエラーにしたいのです。 こういうことでしょうか。 =IF(COUNT(R$4:R$8)=SUMPRODUCT((LEN(R$4:R$8)>0)*1),数式,"")

shishishishi
質問者

お礼

ほんとに何度もありがとうございました! ええ、まさにこれです!そうかこうやればいいんですね。 ありがとうございました。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

No.2です。 >ただ、今回やりたいのはR列に数値以外がきたら、 >計算しないようにしたいのです。 つまり、R列に1つでも数値以外のデータがあれば、計算自体をしないということでしょうか? それなら、質問欄の数式を、 =IF(COUNT(R$4:R$8)=ROWS(R$4:R$8),数式,"") のようにすればいいと思います。

shishishishi
質問者

補足

なんどもありがとうございます。わたしの説明が悪くて申し訳けありません。 =IF(COUNT(R$4:R$8)=ROWS(R$4:R$8),数式,"") ではR列の5つのセル全てに数値が入らないとエラーになりますが、したいことはそうではないのです。 D列とR列が対になっており、D列に入力がない限りおなじ行のR列は "" です。ですから2行の場合も3行の場合もあります。そしてR行に数値以外が表示されたらエラーにしたいのです。 D4 に 2000 R4に 0.5 D5 に 1000 R5に 0.8 D6 に 1500 R6に ※等 この場合エラー COUNTで数値の数を求め、COUNTAで空白以外のセル数を求め、一致しなければエラーにしようとも思いましたが、COUNTAでは数式が入っているセルは空白以外になってしまいだめでした。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 No.1の方の2つ目の数式は、 =ROUND(SUMPRODUCT($D$4:$D$8,R$4:R$8)/SUMPRODUCT($D$4:$D$8,ISNUMBER(R$4:R$8)*1),3) としないとエラーになります。

shishishishi
質問者

補足

早速ありがとうございます。 ご教示の式はR列が数値でないものは分母から除いてるわけですね。 これはこれでとても助かりました。ありがとうございます。 ただ、今回やりたいのはR列に数値以外がきたら、計算しないようにしたいのです。 どう変えればいいのでしょうか?

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

R列が文字の行を計算しない場合 文字が特定のものなら =ROUND(SUMPRODUCT($D$4:$D$8,R$4:R$8)/SUMIF(R$4:R$8,"<>※",$D$4:$D$8),3) 文字が不特定の場合は =ROUND(SUMPRODUCT($D$4:$D$8,R$4:R$8)/SUMPRODUCT($D$4:$D$8,ISNUMBER(R$4:R$8)),3)

shishishishi
質問者

補足

早速ありがとうございます。 ご教示の式はR列が数値でないものは分母から除いてるわけですね。 これはこれでとても助かりました。ありがとうございます。 ただ、今回やりたいのはR列に数値以外がきたら、計算しないようにしたいのです。 どう変えればいいのでしょうか?