问题定义:
在单元格中输入任意数量的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进入。
有趣的问题。 还有,我还没有看到这里记录微妙的问题。
这似乎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型2JRJR
到2JRJP
给出了一个错误在这种情况下,但允许单一区域范围像!R1C1:!R2C1
。 在另一方面,改变了4(xlfsum)到228(xlfsumproduct)只允许单个区域的引用无论哪种方式,它被称为就像SUMPRODUCT。
作为ROW()
返回一个数组,使用INDEX
拿到第1个要素。
你例如变为: =SUMPRODUCT(INDIRECT("A"&INDEX(ROW(),1)))
我不认为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以类似的方式,如果有更多的条件增加