SUMPRODUCT((range={"this";"that"})*(其他条件)) return N/A 如果范围的某些单元格不满足这个或那个

SUMPRODUCT((range={"this";"that"})*(other conditions)) return N/A if some cell of range does not meet this or that

数据集:

A|B

1|a     
2|b     
3|c

公式:

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

sumproduct return NA 在那里。我不明白为什么。我想要 return 2.

如果我正确地将 c 添加到条件 returns 3.

我缺少什么?

您正在比较水平范围与垂直范围。但是,如果是英文版,您的分隔符是错误的。此外,使用右 , 作为分隔符,您的比较将 return 范围内的 TRUEFALSE 值。

将您的比较用双重否定包装起来或乘以 1。例如:

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

或者:

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

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

关于为什么添加 "c" 会起作用的更全面的解释,由 @Jerry 在我曾经遇到的类似问题中给出,可以找到

您正在将大小为 1x3 的数组与大小为 1x2 的数组进行比较,这是不允许的。 (如果比较两个垂直数组,它们的大小必须相同。这就是为什么在公式中添加 "c" 时问题得到解决的原因。)

您需要将 1x3 数组与 2x1 数组进行比较。

这个表达式:

B1:B3={"a";"b"}

Returns:

{TRUE;TRUE;#N/A}

SUMPRODUCT 无法处理逻辑 (TRUE/FALSE) 值,因此您必须加 0、乘以 1 或执行双重否定运算符才能更改为数值数组.

所以...这个:

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

Returns:

{1;1;#N/A}

对此执行 SUMPRODUCT 仍然会 return #N/A 因为数组包含 #N/A.

但是如果你这样做:(注意逗号而不是分号)

B1:B3={"a","b"}

现在你得到:

{TRUE,FALSE;FALSE,TRUE;FALSE,FALSE}

请注意,此 return 是一个 2x3 数组。

执行双重否定运算符,你会得到:

{1,0;0,1;0,0}

现在执行 SUMPRODUCT 将 return 2,如您所料。

您需要的最终公式是:

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