5

我有时会使用 sumproduct 的固有数组功能来避免使用 Control + Shift + Enter 输入公式。但它并不总是有效。例如

=SUMPRODUCT((LEN(B2:F2)-LEN(SUBSTITUTE(B2:F2,M$2:M$10,"")))*N$2:N$10)

会工作,而

=SUMPRODUCT(--IF(ISNUMBER(N6:N9),N6:N9))

不会。

这对我来说并不是很明显,为什么第一个给出正确的结果,而第二个没有。

4

1 回答 1

4

好问题。我的经验法则 > 你看到IF和要分析的范围 > 你按 CSE。

为什么?有些函数会为您本地处理 CSE(SUMPRODUCT作为其中之一),但其他函数不会,例如SUM但肯定也是IF。看看这里这里。该理论的底线(AFAIK)是 CSE 将禁用一种称为“隐式交集”的东西,此处对此进行了解释。它归结为:

“当将范围传递给需要标量(单个)值的函数时,会发生隐式交集。在这种情况下,Excel 将尝试使用同一行或同一列中的引用来解析公式...... .使用Control+ Shift+ (CSE)输入数组公式Enter会显式禁用隐式交集行为。这使得创建将多个值输入作为范围进行操作的公式成为可能。

因为你用IF,在里面没关系SUMPRODUCT。您仍然需要按 CSE 来禁用使用IF.


FWIW:有关称为“隐式交集”的行为的一些附加信息。

让我们想象以下数据:

在此处输入图像描述

我创建了一个名为 range 的命名Vals范围A2:C2。现在公式B5很简单=Vals,但结果是Val5。意思是隐式交集从我的命名范围返回与我输入公式的列相交的值。

为什么?因为在后台(看不见)Excel 使用隐式交集运算符(“@”)从刚才提到的交集返回单个值。我会使用 CSE(读取,删除逻辑运算符),返回的值将是Val2(数组中的左上角值)。

“隐式交集逻辑将许多值减少为单个值。Excel 这样做是为了强制公式返回单个值,因为单元格只能包含单个值。”

逻辑运算符“@”将阻止返回数组并确保您将返回单个值。删除此逻辑运算符(我们通过按 CSE 或使用本机执行此操作的函数来执行此操作)将使公式返回数组。

您可能看不到/不知道此运算符,但随着动态数组公式的出现,它们将更多地出现在您的公式中。请参阅有关此问题的 MS 文档。使用这些新功能,删除逻辑运算符不仅会返回数组,而且实际上会将值溢出到相邻单元格。因此,术语“动态数组公式”。因此,您可以将新的动态数组公式视为传统 CSE 公式的自动替代方案,此外还具有溢出功能。


所以得出结论:

你的第二个公式也可以写成:

=@SUMPRODUCT(--@IF(@ISNUMBER(N6:N9),N6:N9))

按下Enter不起作用,因为仅SUMPRODUCT本机取消(看不见的)逻辑运算符,而IF仅期望标量(单个)值。所以,看不见但有效,你的公式看起来像:

=SUMPRODUCT(--@IF(@ISNUMBER(N6:N9),N6:N9))

但是,按Control++Shift确实Enter会排除逻辑运算符并有效地使您的公式看起来像:

=SUMPRODUCT(--IF(ISNUMBER(N6:N9),N6:N9))

从而能够采用数组。希望这能阐明为什么您需要使用第二个IF公式按 CSE。


有趣的事实: 下一次,试着写=@SUMPRODUCT(...or =@IF(...。您会注意到公式被接受但逻辑运算符消失了。该运算符在后台使用的标志 =)

于 2019-10-24T07:25:31.177 回答