• ベストアンサー

各列の平均の求め方

はじめまして。 よろしくおねがいします。 エクセル2003を使用しています。 4列目に項目が入力してあり、 5列目に平均、 7列目から下に数値が入力されています。 4列目の項目は今の時点で40ほど、 7列目以下の数値は100を越えています。 項目と数値は今後どんどん増えていく予定です。 前は範囲を多めに取って平均を求めていましたが、 数値の数が多くなってきていちいち範囲を変えるのが大変なので、 数値が入力されているセルまでを平均するようなVBAを組みたいです。 よろしくおねがいします。 丸投げで申し訳ございませんが どなたか助けてください。 おねがいします。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ANo.2です。 > なんか不細工じゃないですか…? 個人的にはマクロを組むとなると動作確認などをする必要があるので、単純な関数で解決できるならその方が「仕事を効率よくやっている」ってな気分になります。 でも、せっかくなのでご希望通りにVBAで作ってみました。 B5から左にデータが存在する範囲のAVERAGE関数を埋め込んでいきます。 Sub Sample()   For i = 2 To Cells(4, Columns.Count).End(xlToLeft).Column     With Cells(7, i)       If .Value <> "" Then         Cells(5, i).Formula = "=AVERAGE(" & .Address & ":" & .End(xlDown).Address & ")"       End If     End With   Next i   MsgBox ("AVERAGE範囲更新完了") End Sub

mana0919
質問者

お礼

たびたびありがとうございます。 お手数をおかけしました。 VBAは全くの素人で良く分からず、 なにが良くて何が悪いのか、どうちがうのかなどが分かっておらず、 そんな中で回答して下さいましてありがとうございました。 上司にどのようなものが良いのか皆さんの案を打診してみたいと思います。 ありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! データはB列以降にあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long For j = 2 To Cells(4, Columns.Count).End(xlToLeft).Column i = Cells(Rows.Count, j).End(xlUp).Row If WorksheetFunction.Count(Range(Cells(7, j), Cells(i, j))) Then Cells(5, j) = WorksheetFunction.Average(Range(Cells(7, j), Cells(i, j))) End If Next j End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。 参考になりますかね?m(_ _)m

mana0919
質問者

お礼

ありがとうございます。 参考になります! vba初心者な為皆様に丸投げしてしまいましたが、 回答してくださり感謝しています。 皆さんの回答を参考にどうして行けばよいのか考えてみます。 本当にありがとうございました。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

説明の列と行、間違えていませんか? #4行目に項目、5行目に平均、7行目以下がデータ……なのでは? 私ならわざわざマクロを組むよりは最初から思いっきり広い範囲で設定したAVERAGE関数(例:=AVERAGE(B7:B10000) )を使います。

mana0919
質問者

お礼

回答ありがとうございます。

mana0919
質問者

補足

すみません。間違えてました。 まぁそうなんですけど… なんか不細工じゃないですか…? 気持ちの問題なんですけど… 上司に提出してこれを見られた時、 (技術もないくせに)ちょっと恥ずかしいとか思ってしまって。 すみません。 列と行を間違っているのに解答していただいてありがとうございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

4列目の項目名が新しくデータが挿入された場合でも入力されているのでしたら、例えばすべてのデータが2行目から下方に入力されているのでしたらE2セルには次の式を入力して下方にドラッグコピーすることで項目ごとの平均がE列に表示されますね。 =IF(COUNTIF(D$2:D2,D2)=1,SUM(INDEX(G:G,ROW()):INDEX(G:G,ROW()+COUNTIF(D:D,D2)-1))/COUNTIF(D:D,D2),"")

mana0919
質問者

お礼

ありがとうございます。 列と行の記述をまちがえてしまいました。 もうしわけございませんでした。