ROW()函数内SUM()和SUMPRODUCT(行为不同)(ROW() function beha

2019-07-30 01:23发布

问题定义:

在单元格中输入任意数量的A1 。 现在,试试下面的公式上第一行的任何地方。

=SUM(INDIRECT("A"&ROW()))

=SUMPRODUCT(INDIRECT("A"&ROW()))

第一个公式求值,第二个给出了#VALUE错误。 这是由引起ROW()函数内不同的行为SUMPRODUCT()

在第一个公式, ROW()返回1 。 在第二个公式中,一行返回{1}一个长度的阵列),即使公式尚未输入作为CSE配方。

为什么会出现这种情况?

背景

我需要评估类型的公式

=SUMPRODUCT(INDIRECT(*range formed by concatenation and using ROW()*)>1)

这是工作了一个错误。 作为解决办法对这个问题,我现在计算ROW()在另一个单元格(在同一行中,很明显)并连接这里面我INDIRECT() 或者,我也试过它封装之内的功能,如SUM(ROW())而工作也是如此。

我想肯定很感激,如果有人可以解释(或点我可以解释的资源)为什么ROW()返回一个数组里面SUMPRODUCT()而不CSE进入。

Answer 1:

有趣的问题。 还有,我还没有看到这里记录微妙的问题。

这似乎INDIRECT("A"&ROW())返回一个由这对单元格的引用一种元素的阵列-未在该单元格的值。 许多功能不能正确地解决此类型的数据,但是一些功能,例如N和T可以“取消引用”的阵列,并返回基础值。

采取这种情况下在存在阵列中的两个元素:

=SUM(N(INDIRECT("A"&ROW(1:2))))

这将返回A1 + A2时输入阵列,但正常输入时它只返回A1。 然而改变ROW(1:2){1; 2}这个公式在正常输入时返回正确的结果。 等效SUMPRODUCT公式返回A1 + A2数组是否输入或没有。

这可能涉及到的参数是如何在函数注册。 据http://msdn.microsoft.com/en-us/library/bb687900.aspx主要有两种方法来注册函数的参数来处理Excel中的数据类型:

型R / U: “值,数组和范围的引用。”

键入P / Q:“Excel中转​​换为简单值和多单元格引用单细胞引用制备这些参数时,阵列”。

SUM参数似乎与R型/ U以符合而SUMPRODUCT参数行为像类型P / Q。 阵列进入上述SUM式强制为阵列,而这与SUMPRODUCT自动发生进行评估在ROW的范围引用参数。

更新

多一点调查后,这里的进一步的证据,可能会支持这一理论。 基于在评论的链接,公式= SUM((A1,A2))给出了相同的值:

?executeexcel4macro("CALL(""Xlcall32"",""Excel4"",""2JRJR"",4,,1,(!R1C1,!R2C1))")

通过改变注册的最后一个参数为P型2JRJR2JRJP给出了一个错误在这种情况下,但允许单一区域范围像!R1C1:!R2C1 。 在另一方面,改变了4(xlfsum)到228(xlfsumproduct)只允许单个区域的引用无论哪种方式,它被称为就像SUMPRODUCT。



Answer 2:

作为ROW()返回一个数组,使用INDEX拿到第1个要素。

你例如变为: =SUMPRODUCT(INDIRECT("A"&INDEX(ROW(),1)))



Answer 3:

我不认为ROW()行为不同在这里,它返回在这两种情况下的数组。 我认为SUM和SUMPRODUCT对待数组不同 - 不知道为什么。

许多功能或它们的组合返回数组 - 你不需要CTRL + SHIFT + ENTER要做到这一点,你只需要CSE在许多情况下过程中创建的阵列。

我只想用INDEX代替INDIRECT(这也避免挥发性功能利于你),即

=SUMPRODUCT(INDEX(A:A,ROW()))

....扩大,为您的范围这一公式将计数在列A的范围内,其中x定义起始行和y结尾行> 1的值的数量

=COUNTIF(INDEX(A:A,x):INDEX(A:A,y),">1")

x和y可通过公式计算

您可以使用SUMPRODUCT或COUNTIFS以类似的方式,如果有更多的条件增加



文章来源: ROW() function behaves differently inside SUM() and SUMPRODUCT()