首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel AverageIF函数:只取符合条件的前X行

Excel AverageIF函数:只取符合条件的前X行
EN

Stack Overflow用户
提问于 2016-04-18 09:00:15
回答 2查看 804关注 0票数 0

我有一列条件和一列数据值。我可以使用AverageIF excel函数对符合条件的数据值进行求平均值。但我想做的是,除了这个标准之外,还有一个额外的控制--只取满足标准的前3 (X)行的平均值。

这个是可能的吗?我考虑过AverageIFS,但我不确定如何在第二个条件中包含“Count”、“First”或“Top”函数。

EN

回答 2

Stack Overflow用户

发布于 2016-04-18 09:22:32

尝试此数组公式:

代码语言:javascript
运行
复制
=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改为您想要的值。如果要将条件放在单元格中,也可以使用单元格引用。

票数 0
EN

Stack Overflow用户

发布于 2016-05-04 10:18:14

感谢大家的点子和帮助。最后,我创建了一个宏/函数来完成这项工作。Ascending参数尚未实现,但将允许选择匹配值的方向(即,第一个/顶部X或最后/底部X)。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36683931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档