• ベストアンサー

平均

エクセル2000 で平均を出しています。 アベレッジ関数で出しましたが, 1,2,3,0という4つの数の平均を出すとき 0は含まないで計算させたいときはどうしたらいいでしょうか? コントロールで1,2,3を選択してというやり方はわかりますが, その0が1,2,0.3という並び方もあるんです。 オートフィルで関数をコピーしたいので, 0がある場合は0を省きそのほかを平均するという関数の入れ方を教えてください。

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

  • ベストアンサー
  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.6

あやや。おはずかしい。 マイナスの存在忘れてました(汗 別々の場所に入ってる数値。ですか。 COUNTIFの関数の対象が、<範囲>のため、個別セルの選択ができないみたいですね。 ならば、 =SUM(a1,c1,e1)/(COUNT(a1:e1)-COUNTIF(a1:e1,"=0")) a1からe1の間に、対象となる数値以外の数値がなければ、これで出るはずです。 もし、対象がa列、c列、e列で固定とかなら、 =SUM(a1,c1,e1)/(COUNTIF(a1:a1,"<>0")+COUNTIF(c1:c1,"<>0")+COUNTIF(e1:e1,"<>0")) こうすればいいんですけど。。。。。なんか、スマートじゃないですね(汗 素直に、計算で使用したい数値を別のセルへ抜き出し、連続した範囲にしてから、 CUNTIFなり、DCOUNTなりを使って計算したほうがよさげですね。

その他の回答 (6)

回答No.7

> 私のデータは個別選択なのです。 > (a1,c1,e1) 一番簡単なのは、どこか別の場所に持っていって数える O_Denwaさんの方法 ですね。たとえばf101:f103あたりに =a1 =c1 =e1 としておいてcountifで 数えると。 あと、b1やd1が文字列や空白文字("")の場合はcountif(a1:e1, "<>0")だと数に 入れちゃうけどcountif(a1:e1, ">0")ならはじくので、数値が必ず正ならそっち を使うという手口も考えられるし、ちょっと複雑になるけど配列を使って {=sum(not(iserror(a1/a1))*1, not(iserror(c1/c1))*1, not(iserror(e1/e1))*1, )} なんてヤルととびとびの範囲で0でない数値の個数を数えてくれますが、なにを やってるのかわけがわかんなくなりやすいので推奨しません。

noname#2088
質問者

お礼

ありがとうございました。 連続データに直してみます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

平均=合計/件数の基本式に返る。AVERAGE関数を使わない。 件数が曲者なんですが、COUNT関係の関数は COUNT,COUNTA、COUNTIF,DCOUNT DCOUNTA,COUNTBLANK等あります。 ここではDCOUNTAを使います。 A1セルからA10セルまで 計数 1 0 2 3 4 0 5 小計 6 とし何処でも良いがE1:E2に 計数 >0 と入れる。 件数は=DCOUNTA(A1:A10,1,E1:E2)で出ます。上記例で6。 特徴は0を数えない。文字の入っているセルも数えない。

noname#2088
質問者

補足

ありがとうございます。 a1:a10とするとうまくいきました。 でも。 a1,d1,f1などのようにデータが飛んでいる場合はどうしたらいいでしょうか? 飛んでいるデータで試してみたら, エラーになってしまいました。

回答No.4

合計は0があってもなくても同じです。だから合計を「0以外のデータの個数」で 割ってやれば「0を無視した平均」がでるわけです。 =sum(データ範囲)/countif(データ範囲, "<>0") データが必ず正の数であるなら、O_Denwaさんの条件でもいいです。小学校5年か 6年レベルの問題ですね。

noname#2088
質問者

補足

ありがとうございます。 データ範囲の部分が連続範囲ならいいのですが。(a1:c1) 私のデータは個別選択なのです。 (a1,c1,e1) この場合にはエラーになってしまうのですが, どうしたらいいでしょうか?

  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.3

Excelの関数って詳しくないので、よくしらんのですが、 アベレージ関数使わずに、平均出したらどうでしょうか? A1からA4までに数字が入ってるとして、 =SUM(A1:A4)/COUNTIF(A1:A4,">0") こんな感じで出ませんか?

noname#2088
質問者

補足

ありがとうございます・ 連続データでやっみるとうまくいきました。 でも,a1,c1,e1などのように個別選択でするとエラーが出てしまいます。 どうしたらいいですか?

回答No.2

こんにちは 僕は、あまり関数が複雑になるのが個人的にいやなので こんな方法でやっています。 1.平均を取る数値のセルの横に非表示のセルを設ける 2.そこに、ゼロ以外なら平均取るセルの値を入れる =IF(A1<>0,A1,"") 3.平均取るセルではなくて2.のセルで平均を取る これなら、空白セルは平均に含まれないのでゼロを含みません。 直接回答になってないので、あくまでも、参考にしてください

  • 2002pon
  • ベストアンサー率48% (42/87)
回答No.1

こんにちは。 直接セロを無視する関数は知らないのですが、 AVERAGE関数は数字以外の文字を無視するので、 数値がゼロなら、文字に変換するなど(例えば、=IF(A1=0,"*",A1)とか・・) してもうひとつ数字の羅列を書き出し、その羅列に対して AVERAGE関数を適用してはどうでしょう。 その計算用の羅列の行なり列なりを非表示にすれば、 最終的なみてくれも問題ないと思います。

noname#2088
質問者

お礼

ありがとうございました。 参考になりました。

関連するQ&A