Excel COUNT()和COUNTIF()与数组的区别

3

我认为这应该是一个很简单的问题,但出于某种原因,我无法在任何地方找到解决方案。

在Excel中,我有一个冗长的公式,最终返回一个四项数组--即{1,2,0,0}。我想计算结果数字中大于零的数量。

当我对这个结果使用=COUNT({1,2,0,0})时,得到的预期答案是4。但是当我尝试使用=COUNTIF({1,2,0,0}, ">0")时,它会弹出一个错误,说我的公式有问题。

我做错了什么吗?是否有一个数组等效于COUNTIF()?

2个回答

3
似乎COUNTIF函数只能在范围内使用,而COUNT函数可以利用数组。尝试使用SUMPRODUCT。下面是您的示例稍微扩展后用来测试公式的形式。它基本上检查数组中的每个值是否大于0,如果是,就给它赋值为1。然后SUMPRODUCT遍历并添加所有的1,以便得出大于0的值的总数。
=SUMPRODUCT(IF({1,0,3,0,5,0,0,6,9,9,0,7,0}>0,1,0))

看起来可以了,谢谢 @tittaenälg - 这是一个聪明的解决问题的方法。为什么你选择 SUMPRODUCT 而不是简单地使用 SUM,我认为这里也可以用 SUM,有什么原因吗? - HAWK
@HAWK 我知道 SUMPRODUCT 接受数组作为输入,所以我默认使用它。不过你说得对,SUM 看起来可以得到相同的结果,所以这似乎同样正确并且节省了一些打字。 - tittaenälg
SUMPRODUCT有时比SUM更好,因为根据您使用SUMPRODUCT的方式,您可能不需要“数组输入”,但是如果您的冗长公式无论如何都需要数组输入,则SUM可能更可取。 - barry houdini

0

可能实现此操作最简洁的方法是将从验证检查返回的TRUEFALSE值转换为数字,使用INT函数。 TRUE 转换为 1FALSE 转换为 0。然后对这些 1 和 0 进行SUM

=SUM(INT({1,2,0,0}>0))

或者,正如Barry Houdini所指出的那样,您可以使用以下方式将布尔值强制转换为整数:
=SUM(({1,2,0,0}>0)*1)

或者:

=SUM(({1,2,0,0}>0)+0)

实际上,您甚至不需要像INT这样的函数,可以使用“强制转换器”例如+0或*1,例如=SUM(({1,2,0,0}>0)+0) - barry houdini
@barryhoudini 当然可以。我经常使用*1方法。在这种情况下,使用“INT”实际上对我来说是不典型的,所以我不太确定为什么会这样做。 - Mark Balhoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接