我修改了我在Calculate Moving Average in Excel找到的解决方案,但是我很难进一步找到最后4个值中最低(SMALL)3的平均值。
我在那里的等式现在找到最后四个值(在我的情况下是高尔夫分数)并且可以通过除以4来创建平均值,但是我希望它能够取三个最低值的平均值在最后四个非空白单元格中(最后四个意味着更大的列数)。
答案 0 :(得分:4)
我用过这个版本
=AVERAGE(SMALL(INDEX(F5:AH5,LARGE(IF(ISNUMBER(F5:AH5),COLUMN(F5:AH5)-COLUMN(F5)+1),4)):AH5,{1,2,3}))
使用 CTRL + SHIFT + ENTER确认
INDEX
函数找到包含最后4个值的范围,然后SMALL
给出最小值3和AVERAGE
平均值。
使用ISNUMBER
而不是ISBLANK
意味着如果非数字单元格是真正的空白,公式空白......甚至是文本,则公式有效。
鉴于您似乎在F4:AH4
范围内按顺序排列1到n,如果您希望使用这些数字,则可以进一步简化,即此版本不需要“数组输入”
=AVERAGE(SMALL(INDEX(F5:AH5,LARGE(INDEX(ISNUMBER(F5:AH5)*F$4:AH$4,0),4)):AH5,{1,2,3}))
如果有3个或更少的值,您想要什么结果?第一个版本将返回#NUM!在这种情况下出错,第二个也将返回#NUM!除非有正好3个值,在这种情况下你得到所有3的平均值
答案 1 :(得分:3)
略微简化的版本 - 试试这个数组公式。请务必使用 Ctrl Shift 输入确认:
=SUM(SMALL(INDEX($F5:AH5,MATCH(TRUE,COLUMN($F5:AH5)=LARGE(NOT(ISBLANK($F5:AH5))*COLUMN($F5:AH5),4),0)):AH5,{1,2,3}))/3
答案 2 :(得分:2)
仅当您需要n-1
个n
个数字
=(sum(FourValuesRange) - max(FourValuesRange))/(count(FourValuesRange)-1)
答案 3 :(得分:1)
使用公式处理一个详细的答案,但如果你像你一样取四个总和,然后减去四个中的最大值,然后将结果除以三来得到平均值。
修改强> 以下数组公式适用于我:( Control Shift 输入输入公式)
=(SUM(($F5:AH5)*(COLUMN($F5:AH5)>LARGE((COLUMN($F5:AH5))*(NOT(ISBLANK($F5:AH5))),4+1)))-MAX(($F5:AH5)*(COLUMN($F5:AH5)>LARGE((COLUMN($F5:AH5))*(NOT(ISBLANK($F5:AH5))),4+1))))/3
我认为它可以简化,但我没有解决它
答案 4 :(得分:1)
考虑以下 UDF
Public Function MovAverage(rIn As Range) As Double
Dim wf As WorksheetFunction, M As Long
Dim zum As Double
Dim it(1 To 4)
Set wf = Application.WorksheetFunction
N = rIn.Row
M = rIn.Columns.Count + rIn.Column - 1
j = 1
zum = 0
For i = M To 1 Step -1
v = Cells(N, i).Value
If v <> 0 And v <> "" Then
it(j) = v
zum = zum + v
j = j + 1
If j = 5 Then GoTo NextPart
End If
Next i
NextPart:
MovAverage = (zum - wf.Max(it(1), it(2), it(3), it(4))) / 3
End Function
在工作表单元格中
= MovAverage(F5:AH5)
将获取 F 和 AH 列之间的第5行(不包括空白和零)中的最后四个值,并返回这些值中最小三个的平均值。