今天说说lookup函数的另一个很实用的应用。
实际工作中我们经常遇到查找最后出现的记录,如下面的问题(要查找产品AC1最后一次采购日期,其中B列是按升续排序的)
我们在G3单元格中输入产品的名称AC1,然后在H3输入公式是=LOOKUP(1,0/(A2:A13=G3),B2:B13)
公式解析如下
1、(A2:A13=G3)这部分是判断在A2:A13产品名称区域中,有那几个产品名称是等于AC1的,观察我们可以发现有以下几个是为AC1的,共有三处。即这三处会得到一个TRUE、其他都是False。
2、而不不是AC1产品的,只会False。所以(A2:A13=G3)得到的数据会是{FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE}
图示法:
3、而0/(A2:A13=G3)就是相当于用0分别去除上面的
{FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE}
在计算机里面,true就是对的意思,相当于1。而false就是错的意思,相当于0。而我们知道0/0是一个错误值,而0/1=0.所以上面的除了之后得到的结果是
{#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!;#DIV/0!}
图示法:
可以看到上面只有三个是0(标红色)其他都是错误值。在lookup函数中,错误值是会被忽略的。所以上面的一大串数据在lookup函数中只会是
(“ ” 表示空值){“”;0;“”;“”;“”;0;“”;“”;“”;0;“”;“”}
图示法:
上面每个;表示的是区分位置的,总共有12个值,三个0和9个空值,跟第三个参数B2:B13(也就是日期部分区域)是一 一对应的,有多少个日期上面的就有多少个位置。
4、然后我们上面公式的第一个参数是1,也就是我们用1去{“”;0;“”;“”;“”;0;“”;“”;“”;0;“”;“”}这部分区域去找等于或者最接近且小于的位置,按照lookup函数的二分法,会首先去找到等于1的,显然没有,然后就找最接近且小于的1的位置,因为上面的0,都是满足小于且最接近,又因为Lookup函数默认你是按升序排列的,所以会死脑筋的一直往下找到最后一个0的位置,此时我们算一下是第10个位置满足,于是lookup函数就返回B2:B13这里的第10个位置,也就是B11(建议你手指的数一数),所以最后结果就是得到B11单元格的值也就是2019-1-11
图示法:
以上就是这个公式的解析。
最后强调,这里我们的产品名称是不需要要求按升序排序,但是日期B列是要求按日期排序的,因为我们是要找最后的采购日期。