Excel中2D范围内的平均最后5个值

问题描述 投票:-3回答:1

我已经看到很多解决方案来获得列或行中最后5个值的平均值(参见:[link 1],[link 2]和[link 3])。但是,在我的情况下,不能使用相同的方法,带有空白的2D范围。

示例:enter image description here

每周我都想看看最后5个非空白单元的平均值是多少。我对最后5的定义是相应的:

  • 仅在“count”之上的同一行或多行中的非空单元格(相对于“Average Last 5”列中的单元格
  • 最后一列是最“最近的价值”。因此按时间顺序排列:第1列至第5列

因此,例如对于第9周,最后5个值的平均值是第7周/第1天,第8周/第3天,第8周/第5天,第9周/第1天和第10周/第4天。

现在,这是通过手动选择最后5个来计算的。但我想自动化这个。

我在上面的图片中包含了一些例子。因此,标记的细胞属于相应有色细胞中使用的平均最后5个细胞。

如果不清楚,请询问。

excel
1个回答
1
投票

使用此功能。

将此代码放在附加到工作簿的模块中。

Function LastFive(rng As Range, cnt As Long)
Dim rngArr As Variant
Dim outArr As Variant
Dim i As Long
Dim j As Long
Dim aCnt As Long
rngArr = rng.Value
ReDim outArr(1 To Application.WorksheetFunction.Min(Application.WorksheetFunction.Count(rng), cnt))
aCnt = 1
For i = UBound(rngArr, 1) To LBound(rngArr, 1) Step -1
    For j = UBound(rngArr, 2) To LBound(rngArr, 2) Step -1
        If Not IsEmpty(rngArr(i, j)) Then
            If IsNumeric(rngArr(i, j)) And aCnt <= cnt Then
                outArr(aCnt) = rngArr(i, j)
                aCnt = aCnt + 1
                If aCnt > cnt Then
                    LastFive = Application.WorksheetFunction.Average(outArr)
                    Exit Function
                End If
            End If
        End If
    Next j
Next i
LastFive = Application.WorksheetFunction.Average(outArr)


End Function

然后在第一个单元格中,您将使用以下公式:

=LastFive($B$2:F2,5)

然后向下拖动。不是说第一个细胞是绝对的,而最后一个细胞不是。

5是平均值所需的数字。如果需要,您可以更改或更少。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.