プロが教える店舗&オフィスのセキュリティ対策術

A5からL列までの表があります。
6行目(黄色部分)に平均値を入れたいです。

7行目から下はマクロでデータを持ってきています。
マクロ実行後6行目は常に空白になります。
表が出来たら平均の結果を出したいです。

平均値の参照先は各列の7行目からから下になります。
表は下へ可変します。

B列計算できたら次は隣のC列を計算・・・。

よろしくお願いします。

「エクセルのマクロ教えてください。」の質問画像

A 回答 (3件)

こんにちは



ANo1様と同じ内容ですが、式は
 =AVERAGE(B7:B1000)
でも良いと思います。
右へフィルコピーするのも同様です。

一方で、タイトルが
>マクロ教えてください。
となっているので、マクロから設定するのであれば、B6セルを例として…
 Range("B6").FormulaR1C1 = "=AVERAGE(R[1]C:R[994]C)"
で、同様のことができます。
式をR1C1形式で表現していますが、この形式だと対象列によって式の内容を変える必要がないからです。

B6~L6までをそのまま繰り返せば設定できます。
(もちろん、A1形式を用いて設定することも可能です)
マクロで設定する場合は、計算対象行の範囲が既知でしょうから、それに合わせた式にしておく方がよろしいと思います。(上の例の994のところ。994は1000行を意味しています)


他の方法としては、上記の式の計算もマクロで行ってしまい、結果を直接代入するという方法も考えられます。
各列を順に加算して求める通常の方法でも良いですし、シート関数を利用して
 Range("B6").Value = WorksheetFunction.Average(Range("B7:B1000"))
のようにすることでも結果の値を記入できます。
    • good
    • 0

こんばんは!



すでに回答が出ているとおり、AVERAGE関数でこれ以上のデータはない!
という位まで範囲指定しておけば大丈夫だと思うのですが・・・

どうしてもVBAで!というコトであれば一例です。
A列で最終行を取得するようにしています。

Sub 平均()
Dim j As Long, lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 6 Then
For j = 2 To Cells(5, Columns.Count).End(xlToLeft).Column
Cells(6, j) = WorksheetFunction.Average(Range(Cells(7, j), Cells(lastRow, j)))
Next j
End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます!
ばっちりです!

お礼日時:2017/01/26 14:37

B6のセルに以下の式を入れて、B6をコピーしてC6~L6に貼り付けます。



「=SUM(B7:B1000)/COUNTA(B7:B1000)」
7行目以降を合計し、空白以外の行数で割る計算です^^

※1000行は余裕をもった行数にしています。もっと必要であれば増やしてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!