其实我的理解是:单元格引用参与运算,与数组参与运算还是有区别的,只要是参与的数据进行了数组运算,那么就应该看成是数组公式。
其实象Sumproduct、Lookup这样的函数,虽然我们不用三键结束,是因为这样的函数本身支持数组运算,就算我们直接用引用,但实际上函数也是进行数组运算的:如:
=SUMPRODUCT(A1:C1,A2:C2) 与 =SUMPRODUCT(A1:C1*1,A2:C2) 同样通过单键结束也正常计算的,所以我们还是将其看作为“数组公式”。
又如:Product函数,如果直接用:=PRODUCT(A1:C1,A2:C2)直接结束是可以正常计算的,但一旦修改为:=PRODUCT(A1:C1,A2:C2*1),则必须用数组公式来结束才能正常计算,这也就表明Product函数只支持单元格引用,如果要在内部转换进行数组运算,就必须用三键结束。
再看一个实例,如:=SUMPRODUCT(A1:C1,TRANSPOSE(D1:D3)),象这个公式也是必须使用数组公式结束,虽然Sumproduct支持内部数组运算,但是Transpose()并不支持,所以必须通过数组公式运算后方可交给Sumproduct来再运算。
最后再看这两个实例:
=Sumif(A1:A3,{"A";"B";"C"},C1:C3) 和 =Sumif(A1:A3,B1:B3,C1:C3)
前者大家都用过,是可以直接单键结束生成内存数组的;但后者则不同,如果单键结束,系统只会默认以B1:B3区域中的左上角单元格(B1)进行计算,结果只能返回B1的条件求和;(特此更正:如果使用单键结束编辑,那么系统只能采用B1:B3相对于公式单元格的隐含交叉引用来进行计算!)
为什么呢?虽然Sumif()支持数组运算,但前者的条件本身就是常量数组,那么Sumif()直接运算得出结果{#;#;#},而后者则不同,如果需要生成前者的内存数组,就必须用三键结束来强制将B1:B3的引用转换成数组再进行条件求和才行。
所以,通过以上的实例我们可以看出单元格和数组运算的一些大致关系,这点也是对于学习数组公式的初学者难于理解的。
[此贴子已经被作者于2005-5-18 0:03:16编辑过] |