下图中,匹配各同学的性别、年龄、城市三个字段,直接利用COLUMN函数(返回单元的列),动态返回需求列。公式=VLOOKUP($F2,$A:$D,COLUMN(B2),0),其中参数1与参数2皆涉及到单元格的引用。
2、结合match函数
上图需要匹配的列与原表列的位置顺序一样,可以用COLUMN函数解决,如果顺序不一致的话,需要结合match函数使用,公式=VLOOKUP($F2,$A:$D,MATCH(G$1,$A$1:$D$1,0),0) 注意其中的引用方式。
match函数返回查找值在数组中的位置,比如查找字段“性别”,它在数组“A1:D1”中处于第2位,所以vlookup函数参数三就等于2。
以上两种方式都是通过动态变更参数三,从而完成多字段匹配。
逆向查找
由于vlookup函数的参数2、查找区域首列必须为搜索值对应的列,如果返回值所在的列在搜索值对应的列前方的话,vlookup正常用法无法完成匹配。
下图中,根据A-B列的数据源,匹配出E列的学号,根据前文,搜索区域只能从B列开始、向后拖动,但是返回值在A列,肯定查不到正确的结果。
这种情况我的建议是调整列的位置,比如在学号列前方复制插入姓名列,逆向转正向匹配。
当然也可以使用INDEX+MATCH组合以及XLOOKUP函数解决逆向匹配的问题,这里不是我们的讨论范围,感兴趣的小伙伴可以自行了解。
多条件匹配
多个字段匹配的情况,可以在源数据的基础上,增加一列辅助列,利用“&”将各列数据进行连接。
模糊查找
“*”是通配符,代表0到多个字符,"*"&D2&"*"则表示包含D2关键字的任意字符串:
一对多查找
下图中,根据B-C列数据源,匹配出E列部门的所有员工姓名。由于vlookup函数只能返回首个值,然后有多个员工,这里利用COUNTIF函数将每个部门的个数进行编号。
辅助列公式=B2&COUNTIF($B$1:B2,B2),注意其中的绝对引用。这样每个部门都会被标上序号。
接着F2输入公式=VLOOKUP($E$2&ROW(A1),A:C,3,0),公式下拉,即可返回多个结果。
三、匹配不出来的原因
明明有数据,vlookup却匹配不出来,在工作中是比较常见的。
第一种常见错误是匹配区域未绝对引用、发生变化所致。下图中匹配年龄字段。
在E2单元格内输入公式=VLOOKUP(D2,A2:B9,2,0),由于参数2未采用绝对引用,公式在下拉到“赵云”的时候,引用区域变成了“A4:B11”,区域内并无此人,当然查找不到数据。
正确的做法是:参数2引用区域采用绝对引用(选中引用区域,按下F4键)
第二种常见错误是匹配字段中存在不可见字符,比如空白符,利用Ctrl+H将空白替换掉就可以了。
其它错误可以参考下面这篇文章。明明有数据,为什么我的VLOOKUP总是匹配不出来?
四、规避错误值
vlookup函数在未匹配到数据的情况下,函数会返回#N/A,如果想到规避这种错误值,可以利用IFNA或者IFERROR函数。
公式=IFNA(VLOOKUP(D2,A:B,2,0),"查无此人"),在vlookup函数外层嵌套一个IFNA函数,表示内层的函数表达式(参数1)结果为#N/A,则返回指定的值(参数2),否则返回表达式本身的结果。
IFERROR函数与IFNA用法一致,只不过前者比后者更加强大,关于Excel的错误类型总结,可以参考下面的文章。Excel入门科普文,表格常见错误类型总结
五、冷门用法(仅作了解)
这里的冷门用法是指公式写起来比较麻烦、或者有更高效的函数可以替代,让我们一起看看吧~
IF函数{1,0}用法,每位使用vlookup的童鞋不得不面对的问题。
比如vlookup函数逆向查找,公式=VLOOKUP(D2,IF({1,0},B:B,A:A),2,0)
这里完全可以用match+index函数替代(高版本可用Xlookup)。
比如多条件匹配,公式=VLOOKUP( E2&F2,IF({1,0},A:A&B:B,C:C),2,0),需要Ctrl+shift+Enter三键齐按完成公式的输入。这里也可以用sumif或者sumproduct函数替代。
vlookup函数搭配IF函数的{1,0}功能是不推荐大家使用的,如果想要了解IF{1,0}的具体原理,可以看下面这篇文章。拜托,Vlookup函数的这个功能真的别再用了
最后再给大家分享一个vlookup的小技巧,提取固定数字字符串的技巧。
下图中,提取A列是首次出现的手机号码,输入以下公式:
=VLOOKUP(0,MID(A2&"a",ROW($1:$99),11)*{0,1},2,0),Ctrl+shift+Enter三键。