題 計算列中可變大小的數字塊的平均值?


在專欄中 A 我有一組數字(超過1,000),我希望一次平均得到一個數字(例如,10,所以 A1:A10 然後 A11:A20 等等)並將這些平均值寫入列 B這樣的 B1 包含第一個塊的平均值, B2 第二塊等等。

然後,在 C1 我希望有一個值來定義每個平均值應該考慮的行數(例如,10 = A1:A10A11:A20......和25 = A1:A25A26:A50... 等等)。

當我改變的價值 C1 我想要專欄 B 使用新的塊大小自動更新為平均值。

我該怎麼做呢?


4
2018-06-21 12:39


起源


這個問題沒有顯示出任何研究成果。另一方面,答案非常好。 - Jean-François Corbett


答案:


您可以在不使用VBA的情況下完成。在B1中輸入以下公式並填充到A列的最後一行:

=IFERROR(AVERAGE(INDIRECT("A" & $C$1*(ROW()-1)+1 & ":A" & ROW()*$C$1)),"")

11
2018-06-21 13:54



+1因為我更喜歡VBA的公式,但請注意 IFERROR() 僅適用於Excel 2007及更高版本。 - DMA57361


假設您在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

希望這可以幫助


4
2018-06-21 14:30





在一個模塊中;

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() 並向下拖動/雙角點擊。


3
2018-06-21 13:24