如果某些范围的单元格不满足此条件,则SUMPRODUCT((range = {“ this”;“ that”})*(其他条件))返回N / A

时间:2019-07-18 09:51:52

标签: excel excel-formula sumproduct

数据集:

backend

公式:

A|B

1|a     
2|b     
3|c

sumproduct返回值NA不存在。我不明白为什么。我希望它返回2。

如果我将c添加到条件中,它将正确返回3。

我想念什么?

2 个答案:

答案 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"}))

enter image description here

答案 1 :(得分:2)

您正在比较水平范围与垂直范围。但是,如果使用英文版本,则分隔符错误。另外,使用正确的,作为分隔符,您的比较将返回TRUEFALSE值的范围。

将您的比较用双负或将其乘以1。例如:

=SUMPRODUCT(--(B1:B3={"a","b"}))

或者:

=SUMPRODUCT((B1:B3={"a","b"})*1)

这会将TRUE更改为1,将FALSE更改为0,您的SUMPRODUCT可以实际求和。

@Jerry针对我曾经遇到过的一个类似问题也给出了更全面的解释,为什么添加“ c”会起作用here