我有时会使用 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))
不会。
这对我来说并不是很明显,为什么第一个给出正确的结果,而第二个没有。
我有时会使用 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))
不会。
这对我来说并不是很明显,为什么第一个给出正确的结果,而第二个没有。
好问题。我的经验法则 > 你看到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(...
。您会注意到公式被接受但逻辑运算符消失了。该运算符在后台使用的标志 =)