容忍的平均(忽略#NA等)

我想计算一个范围内的平均值(图中B1:B12或C1:C12),不包括:

  1. 单元格不是数字,包括空string,没有内容的空单元格,# #NA ,文本等(B1 + B8:B12或C1 + C8:C12)。
  2. 其范围(A1:A12)范围内的相应单元格的单元格的值在区间之外(此处为[7,35])。 这将进一步排除B2:B3或C2:C3。 此时,A列中的单元格可能包含数字或没有内容。

我认为不可能使用任何内置的AVERAGE的function。 然后,我试着计算总和,计数和除法。 当我在#N/A范围内有#N/A时,我可以计算出计数(F2和F7),但不能计算总和(F3)

我怎样才能做到这一点?

笔记:

  1. G栏显示了F栏中的公式。
  2. 我无法过滤和使用SUBTOTAL
  3. B8:C8包含没有内容的空白单元格,B9:C9包含空string。
  4. 我正在寻找(非用户定义的)公式,即非VBA。

在这里输入图像说明

您可以通过使用基于嵌套的IF的数组公式来完成这一点,以提供至less部分条件。 当IFparsing为FALSE时 ,不再处理语句的TRUE部分。

平均超过错误

F2:F3中的数组公式是:

 =SUM(IF(NOT(ISNA(B2:B13)), (A2:A13>=7)*(A2:A13<=35)*(B2:B13<>""))) =SUM(IF(NOT(ISNA(B2:B13)), IF(B2:B13<>"", (A2:A13>=7)*(A2:A13<=35)*B2:B13))) 

F7:F8中的数组公式是:

 =SUM(IF(NOT(ISNA(C2:C13)), (A2:A13>=7)*(A2:A13<=35)*(C2:C13<>""))) =SUM(IF(NOT(ISNA(C2:C13)), IF(C2:C13<>"", (A2:A13>=7)*(A2:A13<=35)*C2:C13))) 

数组公式需要用Ctrl + Shift + Enter 来完成。 一旦input正确,如果需要,可以像其他配方一样填充。

数组公式会随着它们引用的范围的扩大而以对数forms增加计算负载。 尽量保持多余的空白行,以避免完整的列引用。

您可以通过一个相当简单的公式获得“NA”列值的平均值,如下所示:

 =AVERAGE(IF( ( ($A$2:$A$13>=$F$2)* ($A$2:$A$13<=$F$3)* ISNUMBER(B2:B13) )>0, B2:B13)) 

使用Ctrl Shift Enter 作为数组公式input。

我觉得这是一个非常明确的写作方式,因为你的所有条件都排列在一起。 他们“和”使用math运算符* ; 这当然会分别将TRUE和FALSE值分别转换为1和0,所以当and'ing完成时,我使用>0将它们转换回TRUE / FALSE。 请注意,不是硬编码阈值7和35(硬编码文字通常被认为是不好的做法),我把它们放在单元格中。

在这里输入图像说明

你的总数和数量是相同的逻辑; 用SUMCOUNT分别replaceAVERAGE

 =SUM(IF((($A$2:$A$13>=$F$2)*($A$2:$A$13<=$F$3)*ISNUMBER(B2:B13))>0,B2:B13)) =COUNT(IF((($A$2:$A$13>=$F$2)*($A$2:$A$13<=$F$3)*ISNUMBER(B2:B13))>0,B2:B13)) 

虽然更简洁的公式也可以用于计数:

 =SUM(($A$2:$A$13>=$F$2)*($A$2:$A$13<=$F$3)*ISNUMBER(B2:B13)) 

可以使用相同的公式来平均/总计/计算您的“空白”列。 在这里,我只是将它们向右拖动一列(G列),这意味着B2:B13所有实例都变成了C2:C13

https://stackoverflow.com/a/30242599/2103990

提供您正在使用Excel 2010及以上的AGGREGATEfunction可以select忽略所有错误。

 =AGGREGATE(1, 6, A1:A5) 

总体排除错误