【问题标题】:Find average for nth last entries matching a certain condition - Excel查找匹配特定条件的最后第 n 个条目的平均值 - Excel
【发布时间】:2015-04-19 11:45:20
【问题描述】:

我想找到一个公式,使我能够一次计算以下两个公式分别计算的内容。该公式必须忽略空白单元格。

1) 一个使我能够平均一列中最后 n 个条目并忽略空白单元格的公式(使用 CTRL+SHIFT+ENTER 输入)

=AVERAGE(IF(ROW(A1:A10)>=LARGE(IF(A1:A10,ROW(A1:A10)),nth),IF(A1:A10,A1:A10)))

2) 如果在相邻列中满足特定条件,则计算平均值的公式(使用 CTRL+SHIFT+ENTER 输入)

=AVERAGE(IF(A1:A10="CONDITION",B1:B10))


当然,我必须手动输入“第n个值”以及条件。


这个例子展示了我想要完成的事情(见下文)

条件为“蓝色”的最后两个条目的平均值是多少? (7.5)

条件为“红色”的最后三个条目的平均值是多少? (7)

等等

再次请注意空白单元格。

【问题讨论】:

    标签: excel conditional-statements average


    【解决方案1】:

    首先在标准模块中输入如下UDF()(用户定义函数)

    Public Function averaje(s As String, nItems As Long, r1 As Range, r2 As Range) As Variant
        Dim N As Long, Kount As Long, i As Long
        Dim n1 As Long, n2 As Long, c1 As Long, c2 As Long
        Dim wf As WorksheetFunction
        Set wf = Application.WorksheetFunction
        n1 = 0
        n2 = 0
        c1 = r1.Column
        c2 = r2.Column
        N = Cells(Rows.Count, c1).End(xlUp).Row
        Kount = 0
    
        For i = N To 1 Step -1
            If Cells(i, c1).Value = s Then
                If n1 = 0 Then n1 = i
                Kount = Kount + 1
                n2 = i
                If Kount = nItems Then GoTo DONE
            End If
        Next i
        averaje = "Not enough items"
        Exit Function
    DONE:
        averaje = wf.Average(Range(Cells(n1, c2), Cells(n2, c2)))
    End Function
    

    用户定义函数 (UDF) 非常易于安装和使用:

    1. ALT-F11 调出 VBE 窗口
    2. ALT-I ALT-M 打开一个新模块
    3. 粘贴内容并关闭 VBE 窗口

    如果您保存工作簿,UDF 将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

    要删除 UDF:

    1. 如上所示打开 VBE 窗口
    2. 清除代码
    3. 关闭 VBE 窗口

    使用 Excel 中的 UDF:

    =averaje("Red",3,A:A,B:B)
    

    要了解有关宏的更多信息,请参阅:

    http://www.mvps.org/dmcritchie/excel/getstarted.htm

    http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

    有关 UDF 的详细信息,请参阅:

    http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

    必须启用宏才能正常工作!

    例如:

    【讨论】:

      【解决方案2】:

      您可以使用此数组公式来平均最后 3 个非空白蓝色

      =AVERAGE(IF(A1:A10="蓝色",IF(ISNUMBER(B1:B10),IF(行(B1:B10)>=LARGE(IF(A1:A10="蓝色",IF(ISNUMBER (B1:B10),ROW(B1:B10))),3),B1:B10)))))

      根据需要更改条件和 n 值。

      如果没有 3 个非空白蓝调,您期望什么结果?使用上述内容,您将获得#NUM!错误

      【讨论】:

        猜你喜欢
        • 2017-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        • 2012-04-21
        • 2016-12-29
        • 2020-06-28
        相关资源
        最近更新 更多