查找与特定条件匹配的第n个最后条目的平均值 - Excel

时间:2015-02-18 12:56:09

标签: excel conditional-statements average

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

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个值”以及条件。


这个例子展示了我想要实现的目标(见下文)

enter image description here

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

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

请再次注意空白单元格。

2 个答案:

答案 0 :(得分:1)

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

  

=平均值(IF(A1:A10 =“蓝色”,IF(ISNUMBER(B1:B10),IF(行(B1:B10)> =>大(IF(A1:A10 =“蓝色”,IF( ISNUMBER(B1:B10),ROW(B1:B10))),3),B1:B10))))

如果需要,更改条件和n值。

如果没有3个非空白蓝调,你会得到什么结果?以上你会得到一个#NUM!错误

答案 1 :(得分:0)

首先在标准模块中输入以下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窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从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

      必须启用宏才能使其生效!

      例如:

      enter image description here