我正在使用一个AVERAGEIF
函数根据下表中定义的所选“主题名称”来计算平均结果。
公式:
=IF($B5="Primary",AVERAGEIF(Primary!$L$4:$T$107,Testing!C5,Primary!$T$4:$T$107),AVERAGEIF(Secondary!$L$4:$T$107,Testing!$C5,Secondary!$T$4:$T$107))
我在 E 列和 F 列中运行相同的公式(只是拉出不同的列 --- 这个 Primary!$T$4:$T$107)。它们工作正常(除了 F 列由于某种原因乘以 10?
无论如何,G 列的结果似乎用 0 填充了除法错误。
下面是提取的数据。只有突出显示的单元格应该被平均。但是,似乎其他单元格(没有数据)也被提取了。我的这个假设正确吗?如果正确,我该如何解决这个问题?
答案1
正如 @Isolated 在评论中指出的那样,AVERAGEIF 中两个范围的大小不相等是自找麻烦。应该有一个一对一的映射,即使用 AVERAGEIF(A1:A10, "test", B1:B10),A 和 B 范围的大小相等。它表示从 B 列对 A 中等于 "test" 的每个单元格进行 AVERAGE。在您的例子中,您在第一个范围内包含多个列,在我看来,这会产生未定义的结果。即使用 AVERAGEIF(A1:B10, "test", C1:C10),不清楚 A1 或 B1 或两者是否应该等于 "test" 才能将 C1 包括在平均值中 - 或者应该将其包含两次?
至于为什么您会收到#DIV0!错误;
如果范围为空或文本值,AVERAGEIF 返回 #DIV0! 错误值,或
如果范围内没有单元格符合条件,AVERAGEIF 将返回错误值 #DIV/0!。
答案2
AVERAGEIF()
其行为方式与某些 Excel 函数类似,即扩展要检查的数组/范围以匹配输入的数组/范围。
例如,在这种情况下,您(奇怪的是,因为由于数据范围内容/结构,显然没有理由这样做)在多列中搜索“草坪护理”之类的术语,并且将在其中找到该术语的列是该范围的第二列。
因此,Excel 会扩大求平均值的范围,使其具有所需的列数。因此,当您输入 T4:T107 作为求平均值的范围时,它会将其更改为 9 列宽(L:T = 9 列,因此...)。这意味着它在寻找平均值时考虑的范围实际上是 T4:AB107。
然后,由于匹配项是在条件范围的第二列中找到的,因此它会从其创建的新范围中的第二列中取值进行平均。换句话说,如果匹配的单元格位于搜索范围左上角单元格的一列上方和三行下方:即 L4,一列上方即 M4,三行下方即 M7,它会在平均范围 (T4:AB107) 中精确对应的位置进行查找:即 T4,一列上方即 U4,三行下方即 U7... 依此类推,查找平均值中需要使用的所有值。
或者换一种方式:您强制它使用实际范围 T:AB 而不仅仅是 T:T,并且由于匹配值在第二列,因此它使用 U 列而不是 T 列来获取平均值。
查看您的结构和数据,要匹配的值显然始终位于 M 列中。就是这样。例如,Q 列中将没有值,因为“特殊功能”根本不会出现在用于保存“点击率”值的列中。要解决此问题,您必须使用适当的搜索范围,因此不要使用 L4:T107,而要使用 M4:M107。
当您意识到部分FALSE
指定IF()
为 U:U 并且公式对 U:AC 中的值进行平均并使用该范围的第二列时,诸如 #DIV0! 之类的错误突然变得有意义了,因此被平均的实际上是 V:V 中的值,所以是 0,并且AVERAGE()
不能处理全零。
其他奇怪的事情也有类似的解释。例如,无缘无故地乘以 10。
旁注:关于公式要考虑的另一件事是,虽然您已经获得了复制和粘贴公式所需的所有合理的绝对引用,但如果您想跨列复制,如 E 到 F,那么您需要更改那个“中间 C”......现在必须找点乐子......TRUE
公式分支中的那个,从裸露的C5
到或您将在 F 列公式中$C5
使用(或者如果您从 F 复制到 E)。D5
B5
需要密切关注细节的悲哀之处在于,这意味着只要错过一个细节,就会让生活变得幸福,而你会说“我只注意到有一次有个孩子跑到我的车前面...”你必须每次都把所有的事情都做对,否则一切都不重要。