查找匹配某个条件的第n个最后条目的平均值 – Excel

我想find一个公式,使我能够一次计算出以下两个公式分别计算的结果。 公式将不得不忽略空白单元格。

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

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

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

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

当然,我将不得不手动input“第n个值”以及条件。

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

在这里输入图像说明

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

最后三项条件是“红色”的平均值是多less? (7)

等等

再次请注意空白单元格。

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

如果(A1:A10 =“蓝色”,IF(ISNUMBER(B1:B10),IF(ROW(B1:B10))> = LARGE(IF(A1:A10 = B10),ROW(B1:B10))),3),B1:B10))))

如果需要改变条件和n值。

如果没有3个非空白的蓝调,你期望什么结果? 与上面你会得到#NUM! 错误

首先在标准模块中input以下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. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

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

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

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

macros必须启用这个工作!

例如:

在这里输入图像说明