一、lookup函数的常规引用
lookup的参数:LOOKUP(结果表要查找值,原始表查找区域)
例一:假设依据姓名来查找对应的语文成绩,公式可以写为=LOOKUP(H2,C2:D19),如下面截图:
例二:通过姓名查找英语成绩,公式便成了:=LOOKUP(H2,C2:F19)
以上的2个例子,能发现LOOKUP进行查找时公式的结构简单,查找值和要找的结果分别位于查找区域的首列和末列。
对于上面的解释为:语文在C2:D19中的D列,英语在C2:F19中的F列。
但是仅仅了解这个用法是不够的,我们再试一个数据的话,有可能就会发现问题:
当查找姓名变成赵永福的时候,结果就不对了,这是因为LOOKUP函数使用的是二分法查找,也就是模糊匹配,
lookup函数使用了二分法查询原理,前提要求必须升序排列
LOOKUP进行比较常规引用,非常重要的步骤是按照查找内容(姓名列)升序排序。
当排序以后,结果变成了正确的!
一个新的问题是在不排序的情况下,LOOKUP函数还能用吗?
二、lookup函数的精确查找套路
=LOOKUP(1,0/(查找范围=查找值),结果范围)
=LOOKUP(1,0/(C2:C19=H2),D2:D19),再使用回车后,我们便能得到这个公式正确运算的结果了
关于这个公式中的1和0到底是什么意思。1是要查找的值(可以理解为相对接近1的值),但是条件变了,不是直接查找姓名,而是根据姓名得到的一组逻辑值:
接下来用0除以这些逻辑值,在进行计算的时候逻辑值TRUE代表1,FALSE代表0,当分母为0也就是FALSE(假值)的时候,计算结果是错误值:
而这组数据只有一个近似0的值其他都是错误值,二分法使得LOOKUP只能找到不大于查找值的最后一个数字,因此只能找到0,最后根据0的行位置(第2行)得到第三参数对应位置的数据,即D2就是我们需要的结果。
关键结构就是:=LOOKUP(1,0/(查找范围=查找值),结果范围)。
这里,我们就可以延伸出多条件下,lookup精确查找用法格式:
=LOOKUP(1,0/((查找范围1=查找值1)* (查找范围2=查找值2)* (查找范围3=查找值3)),结果范围)
每个查找范围内找到要找的值,得到的逻辑值相乘后同时符合多个条件的位置就是1,这个原理是不是与单条件的逻辑一样。
三、使用lookup实现反向查找
如果数据不能排序的话,使用精确查找的套路:=LOOKUP(1,0/(C2:C19=H8),B2:B19)
四、按区间使用lookup查找
下面我们用学生的总分给出相应的评级。50分及以下的为“很差”,50-100分区间显示为“差”,100-150分的为“一般”,150-200分的为“较好”,200-250分的为“优秀”,250分及以上标注为“能手”。
=LOOKUP(G2,{0,50,100,150,200,250;”很差”,”差”,”一般”,”较好”,”优秀”,”能手”})
分数之间的逗号,就可以理解为区间,每一个区间,对应后面的评语部分。使用大括号,在excel表格中,是数组的意思。
按照评语分成了六个等级,当然用if函数也可以实现对应的结果,相对而言,会觉得啰嗦,变成使用LOOKUP处理这类问题非常方便,公式结构也很简单:
=LOOKUP(分数值,{下限1, 下限2……;评语1,评语2……})
1.LOOKUP的第二参数使用了常量数组,这里的大括号是手动输入的,括号内用一个分号分开,左边是每个等级的下限,例如50分以下这个表述里下限就是0,50-100的下限就是50,以此类推,每个数字之间用逗号分开;分号右边是对应的评语,评语应当使用引号,同时用逗号分开(公式里的所有符号都是英文状态下的);
2.数字区间应当遵循升序的排列顺序,否则结果就会错误。
五、关于数据排序的重要性
当我们按照学号查找姓名的时候,发现会出现错误,学号也是按升序排列的啊,怎么会错?
这是一种最常见的错误,这里的学号升序排列只是我们感觉如此而已,实际上升序的效果是这样的:
在使用LOOKUP的时候,如果不使用精确查找的套路,切记一定要排序才能保证公式结果的正确性。
小结
1、今天一共分享了4种LOOKUP的使用套路,分别是常规查找、精确查找、反向查找还有按区间查找,掌握这些套路学会去套用解决问题就可以了;
2、LOOKUP函数的查找原理与我们之前学过的VLOOKUP不同,VLOOKUP函数的查找方式叫做遍历法,找到满足条件的第一个值就会停止查找,而LOOKUP函数使用的是二分法原理进行查找,要找到满足条件的最后一个值才会停止查找,这一点在函数的说明文档里也提到了;
如果不能排序,那么一定要使用这个套路:=LOOKUP(1,0/(查找范围=查找值),结果范围),这也是二分法的特性决定的;