我已经看到很多解决方案来获得列或行中最后5个值的平均值(参见:[link 1],[link 2]和[link 3])。但是,在我的情况下,不能使用相同的方法,带有空白的2D范围。
每周我都想看看最后5个非空白单元的平均值是多少。我对最后5的定义是相应的:
因此,例如对于第9周,最后5个值的平均值是第7周/第1天,第8周/第3天,第8周/第5天,第9周/第1天和第10周/第4天。
现在,这是通过手动选择最后5个来计算的。但我想自动化这个。
我在上面的图片中包含了一些例子。因此,标记的细胞属于相应有色细胞中使用的平均最后5个细胞。
如果不清楚,请询问。
使用此功能。
将此代码放在附加到工作簿的模块中。
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
是平均值所需的数字。如果需要,您可以更改或更少。