|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
第一个公式在2003无法执行,因为2003不允许把整列转换为数组,2007则不止65536行
2003里面,应该分开来写 if(A65536="",lookup(2,1/(A1:A65535<>""),A1:A65535),A65536)
(注意,这上面还没有处理A列全空的情形)
A1:A65535<>"",结果是一个逻辑值构成的向量,逻辑值参与算术运算,TRUE转换为1,FALSE转换为0, 这样1/TRUE=1而1/FALSE=#DIV/0!
关于LOOKUP,用的是两分法,遇到类型不匹配的忽略,遇到比查找值小的,则在后一个分段里面继续两分法查找, 由于所有的值不是比2小,就是类型不对,所以两分法查找最终会停在最后一个1处,1是 1/TRUE得来,也就是对应最后一个非空值的单元格 (具体查找策略论坛有专文论述)
至于第二个公式,也是同样的目的,用个同类型的大于区域中所有值的参数,去查找最后一个同类型值,这里查找的数值,9E307非常接近Excel可以直接在单元格中输入的最大数值9.99999999999999E+307,一般用这个足够了。真有意外的话,可以考虑用5^441,这个已经超过了单元格可以输入的最大数值,且非常接近Excel公式计算可达到的最大数值(2-2^-52)*2^1023 |
|