vlookup是Excel中一个非常重要的、并且使用频率极高的查找函数,官方的含义是:搜索表区域首列满足条件的元素,确定待检索单元格在区域中的行序号,再进一步返回选定单元格的值。
简单的说就是在包含查找值的某个区域的首列进行查找,查找到匹配的数据以后,然后返回该区域同一行上的单元格中的值。
vlookup函数不仅可以进行单条件查找,还可以进行一对多查找、多条件查找、正向查找、反向查找,甚至利用它的模糊匹配功能,代替IF函数做条件判断,那么今天牛哥就来跟大家分享一下vlookup函数在多场景下的使用方法。
先来看下vlookup函数的语法:
vlookup(lookup_value,table_array,col_index_num,[range_lookup])
第1参数lookup_value:表示要在表格或区域的第一列中查询的值。
第2参数table_array:表示要查询的单元格区域,这个区域中的首列必须要包含查询值,否则公式将返回错误值。
第3参数col_index_num:用于指定返回查询区域中第几列的数值。
第4参数[range_lookup]:可选,决定函数的查找方式,如果是为FALSE或0,则是采用精确匹配方式;如果为TRUE或1,则使用近似匹配方式,同时要求查询区域的首列必须按照升序进行排序。
下面牛哥将通过几个具体的实例,来详细的介绍一下vlookup函数的使用方法。
单条件查找之:查找并返回单列记录
如下图所示,左侧单元格区域 A2:C12 中为学生的成绩表,学生姓名在该区域的第一列,
右侧单元格区域E2:F5为查询表,要求根据学生的姓名,使用 vlookup 函数查找出对应学生的数据成绩。
在F2单元格中输入公式:=vlookup(E2,$A$2:$C$12,3,0),然后向下拖动填充公式至F5单元格,所要查找的学生数学成绩就出来了。
Vlookup函数查找并返回单列记录公式解析:
第1参数:E2,为单元格引用,表示要查找的值,即姓名,因为要依次查找每一个姓名,所以公式需要向下拖动复制,引用的单元格也要相应变成E3,E4...所以不需要固定;
第2参数:$A$2:$C$12,表示包含查找值的单元格区域,该区域中第一列(A列)包含查找值,所以符合要求,
查找区域要固定不变,引用的单元格不能随着公式的向下填充而变动,所以使用了$对行号进行了固定;
第3参数:3,这个参数是用于返回哪1列上的值,而数学成绩位于A2:C12区域中的第3列,所以要返回第3列的值;
第4参数:0,因为是精确匹配,所以该参数为0或FALSE。
单条件查找之:查找并返回多列记录
如下图案例所示,这个案例是要求根据右侧学生的学号(G2单元格),在左侧单元格区域A2:E12中,查找出对应学生的姓名,语文、数学、英语三科的成绩。
在H2单元格中输入公式:=vlookup($G2,$A2:$E12,COLUMN(B1),FALSE),并向右拖动填充公式到K2单元格。
Vlookup函数查找并返回多列记录公式解析:
第1参数:$G2,为要查找的值,即通过学号,分别查找出姓名和各科成绩,所以公式会向右复制填充,但是查找的值为单元格引用,公式在向右填充时不能变动,否则就会出错,所以要使用$对列号固定。
第2参数:$A2:$E12,为查找区域,第一列包含查找值的(学号),同样公式要向右填充,也要保持查找区域固定不变;
第3参数:COLUMN(B1),返回对应列上的值,因为本案例的目的是要随着公式向右复制,从而依次返回姓名、语文、数学、英语三科的成绩,所以参数是要随着变动的,而姓名在第2列,语文在第3列,数学在第4列,英语在第5列,所以使用函数COLUMN(B1)返回列号2,当公式向右填充时,依次会变成COLUMN(C1)返回列号3,COLUMN(D1)返回列号4,COLUMN(E1)返回列号5,来达到返回对应列号值的目的。
第4参数:FALSE,精确匹配,上面讲过,0和FALSE在这里都代表精确匹配,所以这里也可以使用了FALSE表示。
单条件查找之:vlookup跨工作表查找
这个案例,查找值和查找区域分别放在了两个不同的工作表,要求根据查询表中的产品编号(查找值),在产品表(查找区域)中进行查找,并将对应的产品信息返回到查询表中。
产品表
查询表
在查询表中的B2单元格中输入公式:=vlookup($A2,产品表!$A:$F,COLUMN(B1),0)并向右、向下拖动填充到F7单元格。
vlookup跨工作表查找公式解析:
第1参数:$A2,查找值,公式要分别向右、向下填充,要保持向右填充查找列一直处在A列,所以列号固定不变,向下填充,查找的产品编号要跟着变化,所以行号无需固定;
第2参数:产品表!$A:$F,查找区域,因为是跨工作表查找,所以跨工作表引用的表示方法为:工作表名称!表格区域(如,产品表!$A:$F)。另外在输入公式的这一处时,可以直接通过点击鼠标切换到“产品表”工作表中,选择目标单元格区域,前面会自动加上工作表名称。同样这里的查找区域也要进行固定。
第3参数和第4参数和上面的案例相似,这里就不多做介绍了,大家不理解的可以去看下上面两个案例中第2,第3参数的解析。
多条件查找之:vlookup结合辅助列查找
如下图要求查找出A、B、C、D店对应月份的销量和营业额。
实际上这里的辅助列的用法就是用连接符&把多个条件,连接成一个条件,然后再使用vlookup函数进行查找,所以查找之前,要在查找区域所在的表建立一个辅助列,将门店和月份用连接符&连接起来,如:A2=B2&C2(A店1月)
然后在J2单元格中输入公式:=VLOOKUP($H2&$I2,$A$2:$E$17,COLUMN(D:D),FALSE),并向右、向下拖动填充公式至K5单元格。
vlookup结合辅助列查找公式解析:
第1参数:$H2&$I2,表示要查找的值,即用连接符&将两个条件连接成了一个条件,连接后的查找值会变成:"A店3月",因为公式要向右、向下填充,向右填充时要保持列号固定不变,所以使用相对引用固定列号,行号要随着向下填充变化,所以无需固定。
第2参数:$A$2:$E$17,表示查找区域,因为第一列要包含查找值,第一列是构建的辅助列,正好是包含查找值的,同样公式要向右、向下填充,要保持查找区域不能随着公式的移动而发生变化,所以也要使用绝对引用。
第3参数:COLUMN(D:D),这个参数是用于返回第几列上的值,本案例的目的是要随着公式向右复制,从而依次返回销量、销售额,参数是要随着变动的,而销量在查找区域的第4列,销售额在第5列,所以使用函数COLUMN(D:D)返回列号4,当公式向右填充时,会变成COLUMN(E:E)返回列号5,来达到返回对应列号值的目的。
第4参数:0,因为是精确匹配,所以该参数为0或FALSE。
多条件查找之:vlookup结合数组的用法
上面的那个案例是借助辅助列的方法来完成多条件查找,但是如果有新的数据添加进来,每次都要先更新一下辅助列,步骤有点繁琐,而接下来这个案例只要使用IF函数,结合数组同样也能够实现vlookup函数的多条件查找,而且步骤一点都不繁琐。
在I2单元格中输入公式:=VLOOKUP($G2&$H2,IF({1,0},$A$2:$A$17&$B$2:$B$17,C$2:C$17),2,FALSE),并向右、向下拖动填充公式至J5单元格。
vlookup结合数组应对多条件查找公式解析:
第1参数:$G2&$H2,表示查找值,同样和上一个案例一样也是用连接符&将两个条件连接成了一个条件,这里的第1参数和上一个案例的第一参数意思是一样,所以就不多做解释。主要区别在第2参数。
第2参数:IF({1,0},$A$2:$A$17&$B$2:$B$17,C$2:C$17),表示查找区域,使用了if函数对数据组内的{1,0}进行条件判断:
当为1时返回$A$2:$A$17&$B$2:$B$17,作为查找区域的第一列,因为这里也使用了连接符&,将门店和月份进行了连接,所以符合查找区域第一列包含查找值;
当为0时返回C$2:C$17,并且作为查找区域的第二列,在第3参数中需要返回该列的(销量)数据;
同样公式要向右、向下填充,查找区域的第一列要使用绝对引用进行固定,而查找区域的第二列,使用相对引用,向下填充要保持行号不变,列号要随着向右的拖动变成D$2:D$17,这样就可以在J2:J5区域返回营业额的数据了。
第3参数:2,返回区域中的第二列,虽然要返回的数据是两列,销量和营业额,但是当公式向右填充到J2单元格时,公式就变成了:=VLOOKUP($G2&$H2,IF({1,0},$A$2:$A$17&$B$2:$B$17,D$2:D$17),2,FALSE),这样D$2:D$17就变成了查找区域的第二列,所以返回该列的值了。
第4参数:同样精确匹配。
Vlookup结合数组进行反向查找
下图表格中要求,根据姓名,查找对应的学生编号,前面的案例都是向右查找,而这个案例是向左查找。
vlookup函数在查找时,要求查找区域的第1列必须要包含查找值,然后向右返回对应行的值,这个案例要返回的值在第1列,包含查找的值在第2列,所以我们可以使用if函数来构建一个数组,做一个位置调换,将左表的B列放在查找区域的第一列,A列放在在第二列,这样就可以使用vlookup进行查找了。
在H2单元格中输入公式:=vlookup(G2,IF({1,0},B$2:B$12,A$2:A$12),2,0) ,并向下拖动填充到H3单元格。
vlookup反向查找公式解析:
第1、3、4参数,和前面的几个案例意思是一样的,这里面就不具体介绍了,
对第2参数做一下解释:IF({1,0},B$2:B$12,A$2:A$12) ,使用If函数构建了一个数组,当条件满足时先返回姓名这一列,然后再返回学号这一列,数组结果为:{"张明明","NX-003";"黄海","NX-005";"夏红鑫","NX-011";.....}这样就可以进行正常的查找了。
如果前面的关于数组的案例的公式理解了,这里就容易理解了。
单条件查找之:一对多查找
这里的一对多查找的意思是,通过一个条件,查找并返回所有匹配该条件的记录值, vlookup函数在进行数据查找时,只匹配第一个符合条件的记录,后面即使有重复的记录也不会再匹配,所以就要结合辅助列、数组来完成一对多的查找。
如下图案例所示,要求找出陈强4月份的所有出勤日期。
在使用vlookup函数查找之前,要先在出勤日期这一列后面添加一个辅助列,并且使用Countif函数统计出姓名是第几次重复出现的。在C2单元格中输入公式:=COUNTIF($A$2:A2,A2),并向下拖动填充到C30单元格。
然后在E2单元格中输入公式:=VLOOKUP("陈强"&ROW(1:1),IF({1,0},$A$2:$A$30&$C$2:$C$30,B$2:B$30),2,FALSE),并向下拖动填充公式,直至出现错误值。
说下解题思路:
vlookup函数在查找数据时,遇到多条重复的记录,只会匹配第1条记录,后面重复的会被忽略,而想要把每一条重复的记录都找出来,就要让查找区域第一列的值都变成唯一值,
所以:需要增加一个辅助列(C列),先通过countif函数,统计姓名是第几次重复出现,并和姓名连接起来,这样查找区域首列重复的姓名,也变成了唯一值(比如陈强第1次出现时是”陈强1”、第2次出现时是”陈强2”…),
最后再使用if函数,来实现将连接后的包含查找值的区域放在首列,要返回的区域放在第二列,即第2参数:IF({1,0},$A$2:$A$30&$C$2:$C$30,B$2:B$30);
那么第1参数:"陈强"&ROW(1:1),将要查找的陈强和ROW(1:1)函数构成的数字相连接,查找值就会变成:"陈强1",当公式向下填充时就会相应的变成:"陈强2","陈强3",这样查找值就符合查找区域首列包含查找值的要求了。
最后第3、第4参数分别是返回对应行上第2列的值和精确匹配。
那结果中没有查到后返回的错误值,能不让显示出来呢?
只要在外层加上iferror函数就可以了,完整的公式:
=IFERROR(VLOOKUP("陈强"&ROW(4:4),IF({1,0},$A$2:$A$30&$C$2:$C$30,B$2:B$30),2,FALSE),"")
vlookup模糊匹配,代替IF做多条件判断
前面几个案例都是介绍的精确匹配的用法,另外还有一个近似匹配是如何应用呢?
使用vlookup函数进行近似匹配查找的前提是,要查找的区域的第一列必须是按照升序排序,否则vlookup无法返回正确的值。
所以这里就利用了vlookup函数模糊匹配的这个功能来进行条件判断,只要设置好条件的区间,并且按照升序排序,就可以代替if函数做条件判断。
下图这个案例是根据左表业绩的等级评定标准,对右表相应的人员业绩进行评定,如果使用if函数,需要嵌套好几层,这里使用vlookup函数简短的一段代码就可以搞定。
在G3单元格中输入公式:=vlookup(F3,A$3:B$7,2,1) ,向下拖动填充到G11单元格。
vlookup做多条件判断公式解析:
第1参数:F3,表示要查找的值,即:业绩;
第2参数:A$3:B$7,表示要查找的区域,因为本案例是近似匹配,所以查找的区域第一列必须要按照升序排序,条件区间分别为:0代表,0-59、60代表,60-69、70代表,70-79、80代表,80-89、90代表,90-99。
第3参数:2,返回等级所在的列号。
第4参数:1,模糊匹配,也可以使用TRUE表示,Vlookup模糊匹配的用法是:在对查找区域内进行查找时,如果没有找到相等的值,则会将小于查找值的最大值返回出来。所以查找F3单元格的业绩(49)时,查找到的是0,返回的等级是E。
关于vlookup函数的使用方法,今天的分享就到这里了,内容比较多,建议大家收藏,然后仔细的看完,如果这些方法都掌握了,相信能够解决Excel工作中的大部分查找难题。
如果文中有不明白的地方,欢迎大家给牛哥留言,另外如需要本案例的素材源文件,大家可以私信牛哥哦。
如果你觉得这篇文章让你掌握了vlookup函数的更多使用方法,就给我点赞吧。
关注我,学习更多Excel办公技能,后续会不断的输出更多高阶技能哦!