挖掘Vlookup函数那些不为大众所知的事之二
咱们接着上一篇没说完的部分说,上一篇我们提到,从以下几个方面来深入挖掘Vlookup函数:易错点、局限性、巧妙应用。
由于篇幅原因只写了前面两点,那么这篇讲的便是Vlookup函数的第三点——巧妙应用。通过对于Vlookup函数的巧妙应用,我们可以很大程度上的提高效率节省时间。本篇提出三点巧妙应用。
一、巧用模糊匹配实现自动返回数据对应范围的结果
如果我们需要根据每个人的成绩和成绩-等级对应表来得出他对应的等级评分,我们第一反应是什么?IF函数?
=IF(C3<60,"不合格",IF(C3<80,"合格",IF(C3<90,"良好","优秀")))
这样可太麻烦了,嵌套三个IF函数。
其实这里直接用Vlookup函数就好,不过前提是成绩对照表中,成绩在第一列,且成绩必须按照从低到高排序。
再来看这公式:=VLOOKUP(C3,$G$4:$H$7,2,TRUE)
怎么样,是不是瞬间清爽多了?比if函数方便快捷多了。当然,这里需要注意的是:
成绩对照表中,成绩在第一列,且成绩必须按照从低到高排序。
成绩对照表中,成绩在第一列,且成绩必须按照从低到高排序。
成绩对照表中,成绩在第一列,且成绩必须按照从低到高排序。
二、利用通配符实现模糊匹配
在这里我们先顺便讲讲通配符。通配符有【*】、【?】两种,星号代表任意多个字符或者字符串,问号代表任意单个字符。若是一个数据中本身包含通配符本身,而恰好我们需要查找通配符本身呢,就在前面加上一个【~】符号,即【~?】可以代表问号本身。
我们在匹配时,有时候会发现查找的值是简称,而我们数据源是全称,这样普通方法去Vlookup查找值肯定是匹配不到的。而如果用Vlookup函数的模糊匹配呢,那可太不靠谱了,绝对会一堆牛头不对马嘴。那么此时我们就可以通过通配符来帮助我们实现了。
假设原公式是:
=VLOOKUP(A2,$E$2:$F$21,2,FALSE)
那么此时加上通配符就是:
=VLOOKUP("*"&J3&"*",$E$2:$F$21,2,FALSE)�
这样我们就可以借助于通配符,用精确匹配来实现模糊匹配,准确度高。
三、巧用函数变量代替第三个参数,实现多列数据的自动查找匹配
如果像下图这样需要匹配很多列结果呢?
B列写=VLOOKUP($A2,$H$2:$L$21,2,FALSE)
C列写=VLOOKUP($A2,$H$2:$L$21,3,FALSE)
D列写=VLOOKUP($A2,$H$2:$L$21,4,FALSE)
……
太麻烦了。
我们发现,上面这些公式只是第三个参数有变化,2依次递增到5。那么我们就可以利用列的变化这个变量来替代这第三个参数。于是公式可以一次性写为:
B2=VLOOKUP($A2,$H$2:$L$21,COLUMN(),FALSE)
然后往右、往下拉填充公式即可。
其中第三个参数COLUMN(),代表当前单元格所在的列数。我们也可以写为COLUMN(B1),代表B1单元格所在的列数。
那么这里再加一点难度,如果我们查询的结果字段不是按照数据源的字段顺序的呢?如下图:
很明显,这样就不能那么简单的用COLUMN函数替代第三个参数了。那么怎么处理呢?我们可以用另一个匹配函数来代替,那就是MATCH函数,没错,上一篇文章刚讲到过的。
用MATCH函数来查找返回该字段在数据源区域的第几列,以此来作为Vlookup函数的第三个参数,这样就完美解决啦!
MATCH函数写为:MATCH(B1,$H$1:$L$1,0),计算结果为4,
代表B1单元格的【城市】字段在我们数据源区域的第4列。将这个函数替代我们Vlookup函数的第三个参数,那么完整的就是:
=VLOOKUP($A2,$H$1:$L$21,MATCH(B1,$H$1:$L$1,0),FALSE)
咦?问题来了,为什么下面的都是错误值?
思考下
。
。
。
原来是MATCH函数的第一个参数B1,忘记给数字1,第一行加上绝对引用,所以下拉就变成了B2,B3……,这样自然不对啦。
修改为=VLOOKUP($A2,$H$1:$L$21,MATCH(B$1,$H$1:$L$1,0),FALSE)
即可!注意下图公式编辑栏中划红线部分的绝对引用相对引用的差异。
其中第一个划红线的部分,是Vlookup函数的第一个参数——查找值。为了避免公式右拉填充时查找对象偏移到B列、C列,故需对列进行绝对引用,所以是$A2;
第二个划红线的部分,是MATCH函数的第一个参数——查找值。是为了找出所需要的字段在目标区域范围内的第几列,在这里要使公式下拉时查找的仍为第一行的字段,故需对行进行绝对引用,所以是B$1。
好啦,关于Vlookup函数那些不为大众所知的事写到这里就算告一段落了。后续我会接着写Lookup函数的用法案例解析,大家有兴趣可以来我的文集看看~