简介
lookup公式用于通过查询值从一个表中查找想要的对应值。例如利用学生的名字从成绩单中查找他对应的分数。
常规用法
Lookup(查询值,查询列表,返回列表)
如图所示AB两列为省份和其对应的代码。在E2位置的公式为=LOOKUP(D2,B2:B33,A2:A33)
,意思是在B列中查找和D2相同的值,如果找到了就返回对应的A列的值。在H2位置的公式为=LOOKUP(G2,A2:A33,B2:B33)
,意思是在A列中查询G2的值,如果找到了就返回对应的B列的值。
从结果可以看出,这两个查询都失败了,一个返回了错误的结果,一个不返回结果。这是因为Lookup函数的设计十分傻逼,一度导致没人愿意用这个函数,直到有人开发出高级用法。那么这个函数傻逼在哪呢?
在Lookup函数中,查询列表必须按从小到大的顺序排列,那有人说这里B列是字符串怎么从小到大,实际上字符串也是有大小的,字符串的大小就是字符在编码表中的编号,从第一个字符开始依次比较,直到比出大小。为什么微软的程序员要做这么傻逼的设计呢?我的理解是为了提高搜索效率。当这就导致这个函数几乎没法使用了。最终这个函数的效果是会把查询列表中不大于查询值的最后一个值返回。这里查询“上海市”返回了64,64对应的是“宁夏回族自治区”。
从下图可以看出,“宁夏回族自治区”是倒数第三个。
然后下图中我们对省份按升序排列了一下,可以看出“新疆”是大于“上海市”的,因此不大于“上海市”的最后一个省就是“宁夏”,所以返回了64。
那么为什么H2也查不到结果呢?明明A列已经按从小到大的顺序排列了。这是因为G列是数字,而A列是文本,想要查询就把G列转为文本吧。把H2的公式改为=LOOKUP(TEXT(G2,0),A2:A33,B2:B33)
即可,结果如下:
高级用法
Lookup(1,0/(查询条件),返回列表)
上面已经提到了,Lookup函数的常规用法几乎毫无用处,但是有人开发了它的高级用法后,这个函数就成了最强查询函数,吊打vlookup毫无问题。
首先介绍一下这个高级用法,查询条件是一个和返回列表维度相同的True/False列表。在计算机中,True=1,False=0。那么如果查询条件为False的时候,分母为0,那么计算结果就是错误的。而如果查询条件为True,那么计算结果为0。然后重点来了,Lookup这个函数在查询时,如果查询列表的值为错误,那么会跳过,这里0/(查询条件)
的计算结果不就是查询列表吗。这个查询列表里为False的值计算结果都是错误,全都会跳过,最后只剩下为True的项目。查询值为“1”,按照lookup函数的尿性,它会返回不大于“1”的最后一个值,也就是查询条件中最后一个为True的值,当然,你把“1”改成其他大于等于“0”的数字也可以,随你喜欢,结果如下图所示。可以看出,这次终于得到了正确的结果。
为什么说这个Lookup函数是最强查询函数呢?因为这里的“查询条件”可以是任意的逻辑判断语句,不仅仅限于等于判断。比如这里我们改一下,我想查询“上海”对应的编码怎么办,少了个“市”那么正常情况下就查不到相等的值啊。简单,用SEARCH函数啊,SEARCH函数返回的是查询字符串在被查询字符串中首次出现的位置编号,如果查不到则返回出错。因此只要能查到值分母就不为零,那么0/(查询条件)
就不出错,不出错的结果即是最终查询到的结果。
来源:CSDN
作者:liucc09
链接:https://blog.csdn.net/liucc09/article/details/104759288