pla*_*lie 8 excel excel-2007 excel-2003 excel-formula
问题定义:
在单元格中输入任意数量A1.现在在第一行的任何地方尝试以下公式.
=SUM(INDIRECT("A"&ROW()))
Run Code Online (Sandbox Code Playgroud)
和
=SUMPRODUCT(INDIRECT("A"&ROW()))
Run Code Online (Sandbox Code Playgroud)
第一个公式计算,第二个公式给出#VALUE错误.这是由ROW()函数内部表现不同引起的SUMPRODUCT().
在第一个公式中,ROW()返回1.在第二个公式中,行返回{1}(一个长度的数组),即使公式尚未作为CSE公式输入.
为什么会这样?
背景
我需要评估一种类型的公式
=SUMPRODUCT(INDIRECT(*range formed by concatenation and using ROW()*)>1)
Run Code Online (Sandbox Code Playgroud)
这样可以解决错误.作为这个问题的解决方法,我现在计算ROW()在另一个单元格中(显然在同一行中)并在我的内部连接INDIRECT().或者,我也尝试将它封装在sum函数中,就像SUM(ROW())它一样.
如果有人可以解释(或指向一个可以解释的资源),为什么ROW()在SUMPRODUCT()没有输入CSE的情况下返回一个数组,我当然会感激.
有趣的问题.这里有一些微妙的问题,我没有看到记录.
它似乎INDIRECT("A"&ROW())返回一个由一个元素组成的数组,该元素是对单元格的引用 - 而不是该单元格中的值.许多函数无法正确解析此类数据,但是一些函数(如N和T)可以"取消引用"数组并返回基础值.
以这种情况为例,数组中有两个元素:
=SUM(N(INDIRECT("A"&ROW(1:2))))
Run Code Online (Sandbox Code Playgroud)
输入数组时返回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公式会强制将ROW中的范围引用参数计算为数组,而这会自动发生在SUMPRODUCT中.
更新
经过一番调查,这里有进一步证据可能支持这一理论.根据注释中的链接,公式= SUM((A1,A2))给出相同的值:
?executeexcel4macro("CALL(""Xlcall32"",""Excel4"",""2JRJR"",4,,1,(!R1C1,!R2C1))")
Run Code Online (Sandbox Code Playgroud)
将最后一个参数注册为类型P通过更改2JRJR为2JRJP在这种情况下给出错误,但允许单个区域范围,如!R1C1:!R2C1.另一方面,将4(xlfsum)更改为228(xlfsumproduct)只允许单个区域引用,就像它被称为SUMPRODUCT一样.
| 归档时间: |
|
| 查看次数: |
12692 次 |
| 最近记录: |