- ベストアンサー
各列の平均の求め方
はじめまして。 よろしくおねがいします。 エクセル2003を使用しています。 4列目に項目が入力してあり、 5列目に平均、 7列目から下に数値が入力されています。 4列目の項目は今の時点で40ほど、 7列目以下の数値は100を越えています。 項目と数値は今後どんどん増えていく予定です。 前は範囲を多めに取って平均を求めていましたが、 数値の数が多くなってきていちいち範囲を変えるのが大変なので、 数値が入力されているセルまでを平均するようなVBAを組みたいです。 よろしくおねがいします。 丸投げで申し訳ございませんが どなたか助けてください。 おねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! データは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
お礼
ありがとうございます。 参考になります! vba初心者な為皆様に丸投げしてしまいましたが、 回答してくださり感謝しています。 皆さんの回答を参考にどうして行けばよいのか考えてみます。 本当にありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
- KURUMITO
- ベストアンサー率42% (1835/4283)
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),"")
お礼
ありがとうございます。 列と行の記述をまちがえてしまいました。 もうしわけございませんでした。
お礼
たびたびありがとうございます。 お手数をおかけしました。 VBAは全くの素人で良く分からず、 なにが良くて何が悪いのか、どうちがうのかなどが分かっておらず、 そんな中で回答して下さいましてありがとうございました。 上司にどのようなものが良いのか皆さんの案を打診してみたいと思います。 ありがとうございました。