Ove*_*ker 5 excel excel-formula sumproduct
有时,我使用sumproduct固有的数组功能来避免不必通过Control Shift Enter输入公式。但这并不总是有效的。例如
=SUMPRODUCT((LEN(B2:F2)-LEN(SUBSTITUTE(B2:F2,M$2:M$10,"")))*N$2:N$10)
Run Code Online (Sandbox Code Playgroud)
会工作,而
=SUMPRODUCT(--IF(ISNUMBER(N6:N9),N6:N9))
Run Code Online (Sandbox Code Playgroud)
不会。
对于我来说,不是很明显,为什么第一个给出正确的结果,而第二个却没有。
好问题。我的经验法则>你看到IF要分析的范围>你按CSE。
为什么?有些函数可以在本地为您处理 CSE(SUMPRODUCT作为其中之一),但其他函数则不会,例如SUM但肯定也是如此IF。看看这里和这里。该理论的底线(AFAIK)是 CSE 将禁用称为“隐式交集”的功能,此处对此进行了解释。归结为:
“当将范围传递给需要标量(单个)值的函数时,就会发生隐式交集。在这种情况下,Excel 将尝试使用同一行或同一列中的引用来解析公式...... .使用Control+ Shift+ (CSE)输入数组公式会Enter显式禁用隐式交集行为。这使得创建将多个值输入作为范围进行操作的公式成为可能。
因为你使用了IF,所以它在里面并不重要SUMPRODUCT。您仍然需要按 CSE 来禁用使用 附带的本机“隐式交集” IF。
FWIW:有关称为“隐式交集”的行为的一些附加信息。
让我们想象一下以下数据:
我创建了一个名为Valsfrom the range的命名范围A2:C2。现在 中的公式B5很简单,=Vals但结果是Val5。意味着隐式交集返回了与我在其中输入公式的列相交的命名范围中的值。
为什么?因为在后台(看不见)Excel 使用隐式交集运算符(“@”)从刚才提到的交集返回单个值。我会使用 CSE(读取,删除逻辑运算符),返回的值将是Val2(数组中的左上角值)。
“隐式交集逻辑将许多值减少为单个值。Excel 这样做是为了强制公式返回单个值,因为单元格只能包含单个值。”
逻辑运算符“@”将阻止返回数组并确保您将获得返回的单个值。删除这个逻辑运算符(我们通过按 CSE 或使用本机执行此操作的函数来执行此操作)将使公式返回数组。
您可能看不到/不知道这个运算符,但随着动态数组公式的出现,它们将更多地出现在您的公式中。请参阅有关此事的 MS 文档。有了这些新功能,删除逻辑运算符不仅会返回数组,而且实际上会将值溢出到相邻单元格。因此出现了术语“动态数组公式”。因此,您可以将新的动态数组公式视为旧版 CSE 公式的自动化替代方案,并添加溢出功能等。
所以得出结论:
你的第二个公式也可以写成:
=@SUMPRODUCT(--@IF(@ISNUMBER(N6:N9),N6:N9))
Run Code Online (Sandbox Code Playgroud)
按Enter不起作用,因为仅SUMPRODUCT本机取消(看不见的)逻辑运算符,而IF仅期望标量(单个)值。因此,虽然看不见但有效,您的公式如下所示:
=SUMPRODUCT(--@IF(@ISNUMBER(N6:N9),N6:N9))
Run Code Online (Sandbox Code Playgroud)
但是,按Control+ Shift+Enter确实会排除逻辑运算符,并有效地使您的公式看起来像:
=SUMPRODUCT(--IF(ISNUMBER(N6:N9),N6:N9))
Run Code Online (Sandbox Code Playgroud)
从而能够获取数组。希望这能澄清为什么您需要使用第二个公式按 CSE IF。
有趣的事实:
下次,尝试写=@SUMPRODUCT(...or =@IF(...。您会注意到公式已被接受,但逻辑运算符消失了。表明该操作符在后台使用的标志 =)