这是LOOKUP函数的“向量形式”。
LOOKUP()里面的3个参数:第1个“1”——查找条件,第2个“0/($A$1:$A$100<>"")”——查找单列(或单行),第3个“ROW($1:$100)”——返回被查到的数据的所在行号。
关键是第2个参数,用倒数(0除以有数据单元格)使第2个参数,始终小于或等于第1个参数。
其中,被除数是0,不论除以什么数都=0,这就可以保证有数据,而不是空值。
另外,第2参数会按升序排序参与运算。这就使返回的数据都是最下面的。
LOOKUP有一种特质是最宝贵的
就是当LOOKUP函数的第一参数是数值,它会忽略第2参数里的非数值(文本,逻辑,错误)尤其是忽略错误值,难能可贵
同理
就是当LOOKUP函数的第一参数是文本,它会忽略第2参数里的非文本(逻辑,数值,错误)
LOOKUP脾气古怪,他要求 第2参数 必须按升序排列
这样 他才能找到 小于等于第一参数的最大数值
但是如果 第2参数 没有按升序排列,LOOKUP返回的值就特别奇怪,似乎没有规律。不过还是有人总结出了规律,这个规律就是 二分法
二分法很难理解,暂且不提
根据二分法原理:
当第2参数 没有按升序排列,第一参数足够大时,返回第2参数 最后一个值
所谓的足够大,就是比 第2参数的任何一个 值都要大
我们再来看这个公式:
0/($A$1:$A$100<>"")的结果是
0;0;0;#DIV/0!;0;#DIV/0!;#DIV/0!;0
第一参数是 数值,所以错误值被忽略了
第2参数没有升序排列 根据 二分法:
第一参数虽然是1 但是足够大了 因为第2参数 最大的数是0
这样返回最后一个值了
查找A1到A100中最后一个非空单元格所对应的行号。
$A$1:$A$100<>""返回的是一组由true(1)和false(0)组成的逻辑值,
0/($A$1:$A$100<>"")返回的就是由0和#DIV/0!组成的一组数。
从这一组数中找1当然找不到,于是返回的是跟1最接近的最后一个0,并在ROW($1:$100)查找并返回这个0所对应的行号。
请求如何从=处开始理解这个公式. 问题补充:试了没用啊,要理解啊,理解万岁 最好的方法就是去试~~看可以得出什么结果~~ 然后反推~~ IF语句