容忍的平均(忽略#NA等)
我想计算一个范围内的平均值(图中B1:B12或C1:C12),不包括:
- 单元格不是数字,包括空string,没有内容的空单元格,#
#NA
,文本等(B1 + B8:B12或C1 + C8:C12)。 - 其范围(A1:A12)范围内的相应单元格的单元格的值在区间之外(此处为[7,35])。 这将进一步排除B2:B3或C2:C3。 此时,A列中的单元格可能包含数字或没有内容。
我认为不可能使用任何内置的AVERAGE
的function。 然后,我试着计算总和,计数和除法。 当我在#N/A
范围内有#N/A
时,我可以计算出计数(F2和F7),但不能计算总和(F3)
我怎样才能做到这一点?
笔记:
- G栏显示了F栏中的公式。
- 我无法过滤和使用
SUBTOTAL
。 - B8:C8包含没有内容的空白单元格,B9:C9包含空string。
- 我正在寻找(非用户定义的)公式,即非VBA。
您可以通过使用基于嵌套的IF的数组公式来完成这一点,以提供至less部分条件。 当IF
parsing为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(硬编码文字通常被认为是不好的做法),我把它们放在单元格中。
你的总数和数量是相同的逻辑; 用SUM
和COUNT
分别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)