以下是引用chenjun在2005-4-27 13:20:00的发言:
是不是理解分析有误?你上面附件中E列的公式
{=RANK(A2:A20,OFFSET($A$2:$A$20,ROW($A$2:$A$20)-2,))}
是这个含义:
OFFSET函数依次返回这样的区域引用A2:A20、A3:A21、......、A20:A38,然后RANK再依次对A2:A20中的每一个在对应的区域中求值,依次返回RANK(A2,A2:A20)、RANK(A3,A3:A21)、......、RANK(A20,A20:A38),请检查每一个公式,返回的结果是正确的。
还是老大看得仔细.(这正是我的目的,其实这正是我提出的ROWS的意思,)
这个是D列的公式=RANK(A2:A20,OFFSET($A$2:$A$20,ROW($A$2:$A$20)-2,))
当然其结果是错误的.
但是如果使用普通数组其结果是正确的如B列的公式
=RANK(A2,OFFSET($A$2:$A$20,ROW($A$2:$A$20)-2,))
D列与B列对比一下就会发现.
但是为什么普通数组就会正确.同时REFERENCE的引用区域如果为单一的单元格也是错误的.
以我昨天晚上的理解.REFERENCE是引用区域要与最后形成的数据区域相当.这样在普通数组中.通过ROW()产生的区域又会与总的区域相交.(有点隐含交叉的味道)得到一组数.但是在内存数组中却是出错.也就是因为OFFSET的生成数组在内存中与普通的数组的不同.(这是我个人的想法)
但如果不管是普通数组还是内存数组如果用OFFSET()或INDIRECT()它们的区域都不能写成单一个数组.如OFFSET(a1,ROW(a2:a20)-1,)或INDIRECT("a"&ROW(a2:a20)-1)这样,否则全部出错.
[此贴子已经被作者于2005-4-27 13:42:23编辑过] |