我有一列条件和一列数据值。我可以使用AverageIF excel函数对符合条件的数据值进行求平均值。但我想做的是,除了这个标准之外,还有一个额外的控制--只取满足标准的前3 (X)行的平均值。
这个是可能的吗?我考虑过AverageIFS,但我不确定如何在第二个条件中包含“Count”、“First”或“Top”函数。
发布于 2016-04-18 09:22:32
尝试此数组公式:
=AVERAGE(IF(ROW($A$2:$A$20)=SMALL(IF($A$2:$A$20=1,ROW($A$2:$A$20)),{1,2,3}),$B$2:$B$20))为数组公式,需按Ctrl-Shift-Enter确认。如果操作正确,excel将在公式周围放置{}。
{1,2,3}按从上到下的顺序表示前三个。它可以更改为every需要的内容,就像前4个代码的{1,2,3,4}一样。
在这一部分中,我使用了1的标准,将1改为您想要的值。如果要将条件放在单元格中,也可以使用单元格引用。

发布于 2016-05-04 10:18:14
感谢大家的点子和帮助。最后,我创建了一个宏/函数来完成这项工作。Ascending参数尚未实现,但将允许选择匹配值的方向(即,第一个/顶部X或最后/底部X)。
Public Function PF_AverageIF(r As range, match As Variant, averagerange As range, count As Long, Ascending As Boolean) As Double
'Debug.Print ("PF_AverageIF called")
'Debug.Print ("range = " & r.Address)
'Debug.Print ("criteria = " & criteria)
'Debug.Print ("averagerange = " & averagerange.Address)
Dim i As Long
Dim total As Double
For Row = 1 To r.Rows.count
'Debug.Print ("=>" & r(Row, 1))
If (r(Row, 1).Value = match) Then
'Debug.Print ("........" & averagerange(Row, 1))
'Debug.Print ("^^^^")
total = total + averagerange(Row, 1)
i = i + 1
If (count > 0) And (i = count) Then
Exit For
End If
End If
Next Row
PF_AverageIF = total / i
End Functionhttps://stackoverflow.com/questions/36683931
复制相似问题