平均在行内输入的最后6条记录

时间:2017-10-04 19:37:59

标签: excel vba excel-vba

所以我制作了一个平均/偏移公式,平均它看到的最后6个记录。例如,如果我使用单元格A1到J1,并且我在A1到H1中输入值,则它将从C1到H1的平均值。如果我在I1中添加一个值,它将D1平均为I1。见下面的公式:

AVERAGE(OFFSET(A1,0,COUNT(A1:J1)-6,1,6))

AVERAGE(OFFSET(first cell, COUNT(entire range)-N,0,N,1))

以下是一个例子:平均值应为3.5

        A   B   C   D   E   F   G   H   I   J
row 1:          4   2   3   4   5   5   2

偏移公式的问题在于,如果在A1到J1之间存在黑色单元格,则计算错误,因为它认为最后一个数据处于中断位置(如果这是有意义的话)。我正在寻找一个替代公式,从所选数组中读取最右边的值(因为我将一直向右添加值)。

2 个答案:

答案 0 :(得分:1)

要连续获取最后6个值,不包括所有空格:

=AVERAGE(INDEX(135:135,AGGREGATE(14,6,COLUMN(H135:AA135)/(H135:AA135<>""),6)):INDEX(135:135,AGGREGATE(14,6,COLUMN(H135:AA135)/(H135:AA135<>""),1)))

答案 1 :(得分:0)

这个小的 UDF()应该适用于任何行或列:

Option Base 1

Public Function SuperAverage(rng As Range, N As Long) As Double
    Dim RngCnt As Long, i As Long, Zum As Double, j As Long
    Dim ary() As Double
    ReDim ary(1)

    j = 1
    RngCnt = rng.Count

    For i = RngCnt To 1 Step -1
        If rng(i).Value <> "" Then
            ary(j) = rng(i).Value
            If j = N Then Exit For
            ReDim Preserve ary(j + 1)
            j = j + 1
        End If
    Next i

    SuperAverage = Application.WorksheetFunction.Average(ary)

End Function

例如:

enter image description here

第一个参数是范围,第二个参数是项目计数。