数据集:
backend
公式:
A|B
1|a
2|b
3|c
sumproduct返回值NA不存在。我不明白为什么。我希望它返回2。
如果我将c添加到条件中,它将正确返回3。
我想念什么?
答案 0 :(得分:3)
您正在将大小为1x3的数组与大小为1x2的数组进行比较。 (如果比较两个垂直数组,则它们的大小必须相同。这就是在将"c"
添加到公式中时解决此问题的原因。)
您需要将1x3数组与 2x1 数组进行比较。
此表达式:
B1:B3={"a";"b"}
返回:
{TRUE;TRUE;#N/A}
SUMPRODUCT
无法处理逻辑(TRUE
/ FALSE
)值,因此必须加0,乘以1或执行双负运算符才能更改为数值数组。 / p>
所以...这个:
--(B1:B3={"a";"b"})
返回:
{1;1;#N/A}
对此执行SUMPRODUCT
仍将返回#N/A
,因为数组包含#N/A
。
但是,如果执行此操作:(请注意,用逗号代替分号)
B1:B3={"a","b"}
现在,您得到了:
{TRUE,FALSE;FALSE,TRUE;FALSE,FALSE}
请注意,这将返回2x3数组。
执行双负运算符,您会得到:
{1,0;0,1;0,0}
现在执行SUMPRODUCT
将返回2,如您所愿。
您需要的最终公式是:
= SUMPRODUCT(--(B1:B3 = {"a","b"}))
答案 1 :(得分:2)
您正在比较水平范围与垂直范围。但是,如果使用英文版本,则分隔符错误。另外,使用正确的,
作为分隔符,您的比较将返回TRUE
和FALSE
值的范围。
将您的比较用双负或将其乘以1。例如:
=SUMPRODUCT(--(B1:B3={"a","b"}))
或者:
=SUMPRODUCT((B1:B3={"a","b"})*1)
这会将TRUE
更改为1
,将FALSE
更改为0
,您的SUMPRODUCT
可以实际求和。
@Jerry针对我曾经遇到过的一个类似问题也给出了更全面的解释,为什么添加“ c”会起作用here