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

时间:2015-03-27 02:24:14

标签: excel excel-formula

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

  1. 单元格不是数字,包括空字符串,没有内容的空白单元格,#NA,文本等(此处为B1 + B8:B12或C1 + C8:C12)。
  2. 对应于其范围内的对应单元格(此处为A1:A12)的单元格具有区间之外的值(此处为[7,35])。这将进一步排除B2:B3或C2:C3。 此时,A列中的单元格可能包含数字或没有内容。
  3. 我认为不可能使用任何内置的AVERAGE类功能。然后,我尝试计算总和,计数和除法。当我在范围内有#N/A时,我可以计算计数(F2和F7),但不计算总和(F3),例如

    我该怎么做?

    注意:

    1. G列显示F列中的公式。
    2. 我无法过滤并使用SUBTOTAL
    3. B8:C8包含没有内容的空白单元格,B9:C9包含空字符串。
    4. 我正在寻找(非用户定义的)公式,即非VBA。
    5. enter image description here

3 个答案:

答案 0 :(得分:4)

您可以通过使用基于嵌套IF的数组公式来完成此操作,以提供至少部分条件。当IF解析为 FALSE 时,它不再处理语句的 TRUE 部分。

AVERAGE over ERRORs

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↵来最终确定数组公式。一旦输入正确,如有必要,它们可以像任何其他公式一样填充。

数组公式以对数方式增加计算负荷,因为它们引用的范围扩展。尽量将多余的空行保持在最低限度,避免完整的列引用。

答案 1 :(得分:4)

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

  

假设您正在使用Excel 2010及以上AGGREGATE function   可以选择忽略所有错误。

=AGGREGATE(1, 6, A1:A5)
     

AGGREGATE excluding errors

答案 2 :(得分:1)

您可以获得&#34; NA&#34;的平均值。列值在一个相当简单的公式中,如下所示:

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

使用 Ctrl Shift Enter↵作为数组公式输入。

我发现这是一种非常清晰的写作方式,因为你所有的条件都是彼此相邻的。他们&#34;&#34;&#34;&#34;使用数学运算符*;这当然分别将TRUE和FALSE值转换为1和0,因此当完成和转换时,我使用>0将它们转换回TRUE / FALSE。请注意,我不是硬编码阈值7和35(硬编码文字通常被认为是不好的做法),而是将它们放在单元格中。

enter image description here

你的金额和计数的逻辑相同;只需将AVERAGE替换为SUMCOUNT

=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))

相同的公式可用于平均/总计/计算您的&#34;空白&#34;柱。在这里,我只是向右拖动一列(G列),这意味着B2:B13的所有实例都变为C2:C13