今天再把LOOKUP的一些常见用法做个总结,作为这个函数系列教程的终章吧,以下是本期正文。
1、LOOKUP基础语法
来看下 LOOKUP 函数的基础用法,函数共有 3 个参数,如下:
= VLOOKUP(查找的值, 查找区域, [返回区域])
3 个参数的解释如下:
查找的值:要查找的词或单元格引用;
查找区域:要查找的区域;
返回区域:要返回的区域,必须是一行或者一列,查找和返回区域必须大小一致;
看着比Vlookup简单一些,当然在实际使用中,还会区分已排序和未排序的场景。
2、Lookup普通查找(已排序)
如果要查找的字段所在列已经排序,那么可以直接使用 Lookup 查找。
例如查找“西瓜”的数量,使用公式:
=LOOKUP(D2,A2:B5)
在排序后,即可轻松将对应的数据匹配出来。
不过这种使用并不多,毕竟数据能排序后再匹配,场景很少。
3、LOOKUP普通查找(未排序)
绝大部分匹配场合都是未排序的,这时候就需要使用0/的方法来匹配。
依旧是查找“西瓜”的数据,公式如下:
=LOOKUP(1,0/(A2:A5=D2),B2:B5)
函数的套路也很简单,用0除以判断条件,只有相符的才不会发生除0错误,使用1进行匹配,即可将对应数值匹配出来。
当然如果不理解公式也无所谓,下次碰到直接套用即可:
=LOOKUP(1,0/(查找区域=查找值),返回区域)
公式效果如下:
4、Lookup模糊匹配
除了精准匹配,和 Vlookup 一样,要实现模糊匹配也非常简单,不过原理不太一致,Lookup 函数需要配合 Find 函数使用。
例如查找存在“西”字符串的水果数量,使用公式:
=LOOKUP(9E+307,FIND(D2,A2:A6),B2:B6)
由于 Find 函数会返回字符串所在的位置数值,当找不到时则返回错误, 这里的原理和查找最后一个非数值内容很接近, 给一个很大的数让 Lookup 匹配即可。
公式实现效果如下:
5、Lookup代替IFS实现区间匹配
在实际应用场景中,Lookup 常常会代替 Ifs 函数,用于简化区间匹配。
在 数字已经排序的场景下 ,利用 Lookup 的特性,可以轻松实现区间匹配。
例如想查找“ 销量为80 ”的提成,使用公式:
=LOOKUP(D2,A2:B6)
原理是 Lookup 在找不到匹配数值的时候,会找一个小于匹配数里的最大值进行匹配,这样就可以巧妙实现区间匹配了,不过数据需要进行排序。
公式效果如下:
这个公式如果要使用 Ifs 或者 If 来写,就非常麻烦了,Lookup 一句话搞定。
6、Lookup多条件匹配
换成Lookup函数进行多条件匹配会更简单,只需将多个条件相乘即可。
例如:查找“广东西瓜”的数量,使用公式如下:
=LOOKUP(1,0/(A2:A6=E2)*(B2:B6=F2),C2:C6)
公式效果如下:
有 N 个条件,就将 N 个条件相乘即可,和单条件其实没啥区别。
7、Lookup查找最后一个非数值
“座”在Excel中是一个很特殊的字,放到Lookup 函数中常用于查找最后一个非数值内容。
例如查找A列最后一个非数值内容,使用公式:
=LOOKUP( "座" , A :A)
原理也很简单,”座“是汉字中编码相对靠后的数值,Lookup 函数如果找不到,则会返回查找区域中小于/等于”座“的最大值进行匹配。
这样就可以找到最后一个非数值了,效果如下:
8、Lookup查找最后一个数值
同样的原理,想要查找最后一个数值,也只需要提供一个足够大的数给 Lookup 进行匹配即可,例如最常见的大数:9E307。
查找 B 列的最后一个数字,使用公式:
=LOOKUP(9E+307,B:B)
公式实现效果如下:
9、Lookup查找最后一个非空内容
除了数值/非数值,Lookup还可以查找最后一个非空内容,思路也非常简单,将查找值替换成空,条件使用不等进行匹配即可。
例如查找A列的最后一个非空内容,使用公式:
=LOOKUP( 1 , 0 /(A1:A100<> "" ), A1 :A100)
公式效果如下:
原理也类似 Lookup 会匹配最小非错误数值,如果理解不了,记住套路即可:
=LOOKUP( 1 , 0 /(匹配区域<> "" ),匹配区域)
10、Lookup多条数据匹配最后一条
和 Vlookup 会返回匹配多条数据中的第一条恰好相反,如果匹配区域中存在多条匹配的数据,则 Lookup 函数默认会匹配最后一条。
例如查找“西瓜”的最后一条数据,使用公式:
=LOOKUP(1,0/(A2:A6=D2),B2:B6)
公式实现效果如下:
11、Lookup查找结果返回于同个单元格
依旧是返回多个结果,不过将结果一次性返回到一个单元格中,单纯利用 VLOOKUP 实现起来还是比较困难的,但是可以借助辅助列。
共有 2 个公式,如下:
G2 = C2& "," &IFERROR(VLOOKUP(B2,B3: $G $12 , 6 ,), "" )
I2 = VLOOKUP(H2, $B $2 : $G $11 , 6 ,)
这里用到了函数调用自身引用单元格的技巧将找到的数据依次拼接,最后使用二分法进行匹配,如下:
当然利用 VLOOKUP 实现这个需求难度的确过大,如果版本比较新,可以使用 TEXTJOIN+IF/FILTER 函数实现,会更简洁一些。
12、Lookup全称查找简称进行匹配
另外一种更加复杂的场景是根据全称去查找简称,使用 Vlookup 就很难实现了,而 Lookup 函数轻松实现。
例如根据地址去匹配所在省份的行政中心,使用公式:
=LOOKUP(9E+307,FIND(A2:A6,D2),B2:B6)
原理和模糊匹配非常接近,只是将 Find 函数的两个参数颠倒下位置即可。
公式效果如下:
13、Lookup提取数据开头的数值
作为匹配中最难的一道题,在数字+中文+英文的混合中,分别将开头/结尾/任意位置的数值提取出来,其他函数几乎办不到。
而 Lookup 可以,套路也很简单,利用 LEFT + 数组公式逐个提取数值匹配。
例如找到最开头的数值,使用如下公式:
=LOOKUP(9^9,LEFT( A2,ROW($1:$9))*1)
公式的实现效果如下:
14、Lookup提取数据结尾的数值
同样,如果要提取数据结尾的数值,将 Left 函数换成 Right 即可。
公式如下:
=LOOKUP( 9 E307,RIGHT( A2,ROW( $1: $9 ))* 1 )
公式实现效果如下,轻松匹配出来:
15、匹配任意位置的数值
相比匹配头和尾,匹配任意位置的数值就非常复杂了,这里需要用到 MID+MATCH+ROW 函数的配合。
公式如下:
=LOOKUP(9E+307,MID(A2,MATCH(1,MID(A2,ROW( $1 : $9 ),1)^0,0),ROW( $1 : $9 ))*1)
公式实现效果如下: