在列中A
我有一组数字(超过 1,000),并且我想一次获取其中一组数字的平均值(例如,10,依此A1:A10
类推A11:A20
),然后将这些平均值写入列中B
,这样包含第一个块、第二个块等的B1
平均值。B2
然后,C1
我想要一个值来定义每个平均值应该考虑的行数(例如,10 = A1:A10
,A11:A20
... 和 25 = A1:A25
,A26:A50
... 等等)。
C1
当我改变我希望列的值时,B
使用新的块大小自动更新为平均值。
我该如何做呢?
答案1
无需使用 VBA 即可完成此操作。在 B1 中输入以下公式并填充至 A 列的最后一行:
=IFERROR(AVERAGE(INDIRECT("A" & $C$1*(ROW()-1)+1 & ":A" & ROW()*$C$1)),"")
答案2
假设 A 列(从第 1 行开始)中有值,并且输入值在 C1 中,则此代码将起作用。
Sub GetAverages()
Dim avgCount As Integer, numberRng As Range
Set numberRng = Range("A1:A" & Range("A1").End(xlDown).Row)
avgCount = Range("C1").Value
For cl = avgCount To (numberRng.Rows.Count - (numberRng.Rows.Count Mod avgCount)) Step avgCount
Cells(cl, 2) = WorksheetFunction.Average(Range("A" & cl - (avgCount - 1) & ":A" & cl))
Next cl
End Sub
请注意,这只会在有足够多值的情况下计算平均值,例如,如果您在 C1 中输入 5,而您只有 A1:A13 的值,那么您只会获得 A1:A5 和 A6:A10 的平均值
希望这可以帮助
答案3
在一个模块中;
Function roll()
Dim i As Long
Dim total As Double
Dim groupSize As Long
Application.Volatile
groupSize = Range("C1").Value
If 0 = Application.Caller.Row Mod groupSize Then
For i = 0 To groupSize - 1
total = total + Application.Caller.Offset(-i, -1).Value
Next
roll = total / groupSize
Else
roll = ""
End If
End Function
放入,然后放入10
并向下拖动/双击。C1
B1
=roll()