• ベストアンサー

EXCELで0を除いた平均値を求めるには?

表記内容の例題として、A1からA10まで数字があります。   A    1 10 2 12 3 0 4 0 5 15 6  0 7 10 ・ ・ ・ ・ ・ ・ 10 12 上記内容の場合、0を除いた平均値は SUM(A1:A10)/COUNTIF(A1:A10,"<>0")となるかと思います。しかし、例えばA2からA4までを非表示にした場合も内容が変わりません。表示されている項目のみで且つ、0を除外した計算式はどのような関数が良いのでしょうか? よろしくお願い致します。

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

  • ベストアンサー
noname#24921
noname#24921
回答No.2

まず XXwaiwaiXX さんが書かれた計算式では分母が"8"になり、非表示にする前の計算も正しい答えは出ないと思います。8~9行もカウントされるからです。 分母は COUNTIF(A1:A10,">0") とします。 次に「例えばA2からA4までを非表示にした場合」と書かれていますが、どのような操作で非表示にするのでしょうか。推定としては次の2つの方法が考えられますが、それについてこう言う方法もありますということで書いてみます。非表示の方法がもし違ってたらごめんなさい。 (1) A2からA4を行ごと(2~4行)非表示にする場合。   A  B    1  1  10 2  0  12   3  0   0   4  0   0 5  1  15 6  1   0   7  1  10 ・     ・      ・     ・ 10  1  12 上記のようにA列の前に新たに列をもうけ例えば非表示にする行には"0"を、また表示させたい列には"1"入れる。合計を表示させるセル(B11)に次の式を入れます。 式 =SUMIF(A1:A10,1,B1:B10)/COUNTI(B1:B10,">0") これにより2~4行を非表示にしても答えは同じ。 (2)非表示にするのにオートフィルターを用いる場合。   A  B    1  a  b 2  1  10 3  0  12   4  0   0   5  0   0 6  1  15 7  1   0   8  1  10 ・     ・      ・     ・ 11  1  12 上記のように1行目の前に行を1行追加し、列の項目に名前をつける(a,b)表中の任意のセルをクリックし「データ」「フィルター」「オートフィルター」をクリックし、a の矢印をクリックし"1" を選ぶ。  B12 には次の式を入れる   =SUBTOTAL(9,B2:B11)/COUNTIF(B2:B11,">0")

XXwaiwaiXX
質問者

お礼

非常に解りやすくご案内頂きありがとうございます。 非表示の方法ですが、1・2の両方を試してみたのですが 肝心な絞込みを理解していませんでした。 =SUMIFと=SUBTOTALの使い方が違うのですね。すいません。 こんな知識レベルで答えを求めていたので非常に助かりました。 もう一度データを整理してみます。 ありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 これは、汎用性のあるユーザー定義関数SUMTOTALです。 使用法は、 'VSUM(集計方法,範囲,ゼロオプション) で、集計方法は、 1 は AVERAGE 2 は COUNT 3 は COUNT 9 は SUM です。 ゼロオプションは、デフォルトはFALSE ですが、TRUE を入れると0を勘定にいれません。また、文字列も、現在の場合、勘定には入れません。(ゼロの扱いはしない、ということです) なお、とりわけ、質問のみということではなく、汎用性や発展性を考えた関数です。 こういうスタイルをお望みでない場合は、また、ご相談ください。他の方法を考えてみます。 '----------------------------------------- '<標準モジュール登録> Function VSUM(集計方法 As Integer, _  範囲 As Range, _  Optional ゼロオプション As Boolean) As Double  'VSUM(集計方法,範囲,ゼロオプション)  '非表示になっている行は集計しない  Dim c As Variant, i As Long, Sum As Double, Z As Boolean  If ゼロオプション = True Then Z = True  Select Case 集計方法   Case 1 '平均    For Each c In 範囲     If c.EntireRow.Hidden = False Then      If Z = True And c.Value <> 0 And VarType(c) = vbDouble Then       Sum = Sum + c.Value       i = i + 1      ElseIf Z = False And VarType(c) = vbDouble Then       Sum = Sum + c.Value       i = i + 1      End If     End If    Next    Sum = Sum / i   Case 2 'Count    For Each c In 範囲     If c.EntireRow.Hidden = False Then      If VarType(c) = vbDouble Then       If Z = True And c.Value <> 0 Then        i = i + 1       ElseIf Z = False Then        i = i + 1       End If      End If     End If    Next    Sum = i   Case 3 'Counta    For Each c In 範囲     If c.EntireRow.Hidden = False Then      If Z = True And c.Value <> 0 Then       i = i + 1      ElseIf Z = False Then       i = i + 1      End If     End If    Next    Sum = i   Case 9 '合計    For Each c In 範囲     If c.EntireRow.Hidden = False Then      If VarType(c) = vbDouble Then       Sum = Sum + c.Value      End If     End If    Next  End Select  VSUM = Sum End Function

関連するQ&A

  • エクセルでの関数

    SUM(COUNTIF(AJ11:AL11,"(7)"),   COUNTIF(AJ11:AL11,"(8)"),   COUNTIF(AJ11:AL11,"(9)"),   COUNTIF(AJ11:AL11,"(10)"),    COUNTIF(AJ11:AL11,"(11)")) SUMとCOUNTIFでの組み合わせ関数を使ったときに、カウントされた数字が0の場合にセル上が0表示でなく無表示にしたいのですが、良い方法が有りますでしょうか? お願いします。

  • Excelの平均値について。

    画像のようにA列の4:20にランダムの数字が表示されます。 そこで4の倍数の箇所だけの平均値をA2に表示したいのですが、どうすればよろしいでしょうか。 ただし、空白と0の場合は計算に入れないとします。

  • エクセル2003 計算されないようにしたい

    例 A列     B列  1     =A1+A2  2     =A2+A3  3     =A3+A4 (A4は空白です) となっている場合に B1=3 B2=5 B3=3 になると思うんですが この時に空白のセルと計算結果を出すときは0もしくは 計算されないようにしたいです。 最終的にB列にSUM関数を使って合計を出したいのですが A列に求めたい数字が片方しか入ってない場合 (数字が入っているセル+空白セル)はSUM関数の合計に入れたくないです。 なので上記の例では B列にSUM関数をした場合11ではなく8にしたいです。 それには文字列を入力して#VALUE!にするしかないですか? でもその状態にしてSUM関数で合計を出したときも#VALUE!になってしまいます。 よろしくお願いします。

  • エクセルで平均値の求め方は?

    エクセルで平均値の求め方がわかりません。 以下のような表の場合で、回答者の平均年齢を求めるにはどうしたらいいんでしょうか。 A   B 年齢  件数 16   5 17   10 18   11 19   10 20   14 21   8 22   9 23   18 24   13 25   18 26   19 これまでは、 (1)年齢×件数=nを計算し、C列に仮配置 (2)SUM(C1:C10)/SUM(B1:B10) で計算していました。 よくわかる解説ページを教えていただくだけでも結構ですので、よろしくお願いします。

  • エクセルについて

    エクセルについて フィルタで表示された0以外の数値の平均値を出す方法がわかりません。 SUBTOTALとSUM(A●●:A●●)/SUM(COUNTIF(A●●:A●●,{"<0,",">0"}))を 組み合わせれば。。。と考えたのですが、上手くいきません。 どなたかアドバイスをお願い出来たらと思っております。 よろしくお願いいたします。

  • エクセルで3列おきの平均値を

    こんにちは! エクセルで、3列おきのセルの値の平均値を出したいのですが、値がエラー(#N/Aと表示されている)場合は、平均を求める計算の中に含めないようにしたい・・・というのはどうやって設定したらよいのか、お教えください! 関数等、色々試して見たのですが、よくわかりませんでした・・・。どうぞどうぞ宜しくおねがいたします!

  • Excel平均値のSUMIF/COUNTIFのCOUNTIFの条件

    毎月の集計で常に平均値を知りたいのですが、経過日については日々数字が入ります。後日分について、空白部分のカウントをしないように関数をいれ、現在までの平均値を把握したいと思います。 SUMIF(A1:A31)/COUNTIF(A1:A31)だと誤って空白もカウントしています。望んでいる経過日までの平均値が出ません。 空白をカウントしない関数を教えていただけませんでしょうか?

  • エクセル2003 合計した数式に単位を付けたい

    「sum」「countif」などの関数を使って出した合計の数字に「人」や「センチ」などの単位を付けて表示したいのですが、どのように設定したら良いですか? (エクセル2003をXPで使っています。)

  • エクセルでおしえてください

    シート1のA1~A3の合計を、B1にSUM関数で計算させてます。シート2のB1にシート1のB1に関数が入力されていれば1、関数以外の文字や数字が直接入力されている時には0を表示させるにはどうすればいいのでしょうか?。

  • Excelでオートフィルターをかけているのですが

    よろしくお願いします。 Excel2000でオートフィルターをかけ、 指定した内容のみを表示させています。 この表示されている数字だけをSUM関数などで 計算させたものを特定のセルに出したいのですが、 どうすればよいのでしょうか?

専門家に質問してみよう