我有一列标准和一列数据值。我可以使用AverageIF
excel函数来平均符合条件的数据值。但我想要做的是,除了这个标准之外,还有一个额外的控制 - 只取前三(X)行的平均值来满足标准。
这可能吗?我考虑过AverageIFS
,但我不确定如何在第二个标准中包含“计数”或“第一个”或“顶部”功能。
答案 0 :(得分:0)
试试这个数组公式:
=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确认。如果正确完成,则会将{}
放在公式周围。
{1,2,3}
从上到下依次表示前三个。对于前4个,可以将其更改为{1,2,3,4}
所需的内容。
我在这部分1
中使用了$A$2:$A$20=1
的标准,将1更改为您想要的任何内容。如果要将标准放在单元格内,也可以使用单元格引用。
答案 1 :(得分:0)
感谢大家的想法和帮助。最后我做了一个宏/函数来完成这项工作。 r
是要查找match
的范围,count
确定有多少匹配结果(取自范围averagerange
)到平均值。 Ascending
参数尚未实现,但允许选择匹配值的方向(即,第一个/顶部X或最后一个/底部X)。 match
过于简化,因为它只找到相等的值(不是<
或>
或!=
等。如果count
大于匹配数,则返回匹配值的平均值。
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 Function