以下是引用ZPX在2004-12-20 9:43:00的发言:
没看明白?谁给解释一下。
班门弄斧一下,昨天才看了apolloh版主的Match(,0/()),match在乱序数据列中的查找原理,现在就来解释一下。
=LOOKUP(2,1/((A1:A10<>0)*ISNUMBER(A1:A10)),A1:A10)
先来看看((A1:A10<>0)*ISNUMBER(A1:A10))
首先这是个数组公式,所以A1:A10<>0会得到10个逻辑值,当单元格中的值不为0时得TRUE,否则为FALSE,而ISNUMBER(A1:A10)得到的也是10个逻辑值,因为TRUE=1,FALSE=0。因此两式一乘就等于是做了一个AND操作(这在论坛的一篇叫“骗你爱上数组公式中”有详细讲解)。这样的结果就是当单元格中的值为数字并且不等于0时的值为1,其余值为0这么一个数组。
用1去除以这个数组时会得到两种值,1和#DIV/0!。而lookup会将与查找值类型不一致的值给忽略掉,这样,所有值不等于0并且为数值的单元格会得到一个1的值,而查找值是2,根据lookup的帮助信息中知道lookup函数会把查找区域中的内容认为是以以升序顺序放置的,当找不到等于查找数值的值时会返回数组中小于或等于 lookup_value 的最大值。
当找到第一个1时,一比较,小于2。所以lookup会接着往下走,结果又找到一个1,仍然比2小,所以还会继续走下去,直到走到最后一个1时,发现后面已经没有数字了,就把这一个位置返回。这就是满足条件的最后一个不等于0的数值的位置,得到位置后lookup就可以返回该位置的值了。
语言表达能力较差,看起来可能较费劲。多包涵。
下面的文件可能会有点帮助。
FGIsINYu.rar
(1.99 KB, 下载次数: 162)
[此贴子已经被作者于2005-7-20 22:20:20编辑过] |