LOOKUP函数和FIND函数联手表演
先用一个问题来开场:
根据关键字得到相应的价格值。怎么破?如果用VBA代码来处理那么思路是很明确的,做两个循环加一个模糊匹配就好了。对于不会代码的朋友也不是没法来做,思考一下,这样试试:
在B8单元格输入公式:
=LOOKUP(0,-FIND(A8,$A$2:$A$5),$B$2:$B$5)
然后下拉填充至B12即可。
公式解析:
1、FIND(A8,$A$2:$A$5):由于是关键字匹配查询,那么这个关键字在原完整字符串里面势必是有个地位的,也就是有个顺序,这个FIND公式就是用来定位关键字在源字符串中的位置,如果不存在,则返回错误值#VALUE!,按F9键可以看到FIND(A8,$A$2:$A$5)返回的结果是:{4;#VALUE!;#VALUE!;#VALUE!}
2、FIND(A8,$A$2:$A$5)若有返回值,那么返回的值肯定是一个正数,但是无法确定是多少,由于lookup函数会自动省略掉错误值,并按照二分法返回小于或等于且最接近查找值的数据,所以要在FIND(A8,$A$2:$A$5)前面加上一个负号,那么FIND(A8,$A$2:$A$5)得到的结果是:{-4;#VALUE!;#VALUE!;#VALUE!}
3、LOOKUP函数的第一个参数设置为0,就可以一次性找到比0小的那个值了,从而找到匹配值。当然,当LOOKUP函数的第一个参数为0的时候,它相当于第一个参数省略,所以此公式也可以写为:=LOOKUP(,-FIND(A8,$A$2:$A$5),$B$2:$B$5)
拓展:由于本题目可以看出源字符串本身比较短,那么FIND函数返回的值也不会大,最大超不过LEN(源字符串),所以你如果不想在FIND函数前面加负号的话,就可以把LOOKUP函数的第一个参数的值设置大点,比如这样设置公式也是可以的:
=LOOKUP(100,FIND(A8,$A$2:$A$5),$B$2:$B$5)
一句话结尾:重在理解每个函数的基础用法!!!