lookup查询之道
查询函数我们之前学了行查询(hlookup)与列查询(vlookup),今天我们学习一个不一样的查询函数:lookup()
那它与之前两个查询函数有什么不同呢?下面我们看一个例子:
现在有一个需求:让你根据所输入的会员名字查询该会员最后一次的消费金额:
如果我们用vlookup()函数进行查询,它返回的是从上到下,满足条件的第一个会员所消费的金额。如:查询A会员用vlookup()函数查询,其返回值为:600
此时我们这里便用到了lookup()函数。我们愉快地输入公式:
此时我们却发现结果不是230,这是为什么呢?
这时我们就要注意vlookup、hlookup与lookup函数的查询原理了,前面两个是用了遍历的方法去查询,而lookup则是用二分法进行的查询。
遍历查询就是从前到后一次查询,直到找到满足条件的值时才会停止查询,二分法则是从中间查询,如果中间值等于中间值时,便会返回中间值,如果小于,则向前查询,再找中间值;如果大于,说明要查询的值在后面,则会向后查询。比如:1、2、3、4、5、6、7,如果时遍历查询,我们要查询4,则会从1开始,依次向后,如果是二分法查询,则会直接从中间值4查询。
我们在将A列的文本用数字表示,如下图:
输入公式C2=CODE(A2),批量填充即可得到上图,code()函数返回值为文本在计算机所代表的数字,此时我们用二分法验证,lookup返回的值是正确的,但是这不是我们需要的,此时我们应该想一个办法让lookup()给我们返回所要的值,这是我们改正一下公式,输入=LOOKUP(1,0/(A2:A8=A10),B2:B8)可以得到下图:
此公式的含义为:0/(A2:A8=A10(表示要查询的A列区域如果满足等于所要查询的值时,返回为0,否则返回一个错误值,而lookup函数会自动忽略错误值。上图满足A列=B的有3个,此时返回值为{0,0,0};由于1永远大于0,所以即使用二分法查询,它也会一直往下走,一直到最后一个满足查询条件的值,我们也就因此获得B会员最后一次的消费金额了。