Vlookup函数
- 公式解析
- 官方说明:VLOOKUP函数用于搜索指定区域内首列满足条件的元素,确定待检测单元格在区域中的行序号,再进一步返回选定单元格的值。
- 语法
VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup])
VLOOKUP(要查找的值,查找区域,要返回的结果在查找区域的第几列,精确匹配或近似匹配)
参数说明:
参数名称 | 说明 |
lookup_value (必需参数) | 要查找的值。 要查找的值必须位于 table_array 参数 中指定的单元格区域的第一列中。 例如,如果 table-array 指定的单元格为 B2:D7,则 lookup_value 必须位于列 B 中。 Lookup_value 可以是值,也可以是单元格引用。 |
Table_array (必需参数) | VLOOKUP 在其中搜索 lookup_value 和返回值的单元 格区域。 可以使用命名区域或表,并且可以在参数中 使用名称,而不是单元格引用。 单元格区域中的第一列必须包含 lookup_value。 单 元格区域还需要包含要查找的返回值。 |
col_index_num (必需参数) | 其中包含返回值的单元格的编号(table_array 最左 侧单元格为 1 开始编号)。 |
range_lookup (可选参数) | 一个逻辑值,该值指定希望 VLOOKUP 查找近似匹配 还是精确匹配:
母排序,然后搜索最接近的值。 这是未指定值时的默 认方法。 例如,=VLOOKUP(90,A1:B100,2,TRUE)。
例如,=VLOOKUP("Smith",A1:B100,2,FALSE)。 |
3)难度级别:★★☆☆☆
- 基础用法举例
题目一:精确查找,根据姓名查找对应的业绩
公式写法:=VLOOKUP(G:G,D:E,2,FALSE)
题目二:模糊查找,根据成绩,匹配人员星级。
公式写法:=VLOOKUP(C:C,$F$3:$G$7,2,TRUE)
说明 :对于数值查询,从,$F$3:$G$7第一个格子开始,向下查找,只要出现一个比当前要查找的值大的数,那么前一个数就是结果,如果一直没出现,则将最后一行作为结果。
比如上述的列子,50查找的时候往下找,比50大的就是60,那前边的值就是0,对应的就是等级D了。
PS:大家注意上边两个公式的写法,题目一中是用的列引用,这样的好处是,公式进行拖拽时,不用担心参数的问题;题目二中,目标题采用了列引用的试,查找区域则采用的是区域绝引用的方式。具体哪一个更好,大家根据工作需求,只要能解决问题就OK了。
- 扩展用法举例
题目三:根据右边的值查找右边的值,
一眼看上去,感觉用vlookup能实现,其实得不到我们想要的结果。那如何解决呢,有两种解决方案:
①vlookup结合if{1,0}来解决
公式写法:=VLOOKUP(G:G,IF({1,0},$D$4:$D$9,$B$4:$B$9),2,FALSE)
如果if{1,0}的用法不明白的话,可以去看我上面一篇文章,里面有详细的介绍。
②使用lookup来实现
公式写法:=LOOKUP(1,0/(G5=$D$5:$D$9),$B$5:$B$9)
公式解析:
1)如果A=B,会返回结果TRUE,TRUE在运算中相当于数字1。
2)如果A<>B,会返回结果FALSE,FALSE在运算中相当于数字0。
3)0/($G$5=$D$5:$D$9)的结果我们可以归纳为:0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0 !。如下图:
4)LOOKUP函数:特征1:查找时可以忽略错误值且,这样一组数值忽略后只剩下一个值0。
5)LOOKUP函数特征2:当查找的值不存在时,按照小于此值的最大值进行匹配。故设置查找值为1,从而实现查询的目的。
备注:
“0/”的目的就是把符合条件的值变为0,不符合条件的变为错误,利用LOOKUP函数的特征查找到符合条件的值。
上面的例子中,目标值为1,在数组【0,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0 !】中未收到,小于1的最大值就是0,那0对应的值就可以找到,从而实现根据右侧的值精确匹配左侧的数值。
题目三:通配符查找
公式写法:=VLOOKUP("*"&E4&"*",C:C,1,FALSE)
通配符说明:?代表零个或一个字符,*代表零个或多个字符。
那vlookup和lookup有什么区别呢?:
第一,在多条件查找方面,就能看出lookup函数好用。用vlookup多条件查找,最简单的方法就是借用辅助列。
第二, VLOOKUP函数对于反向查找是需要嵌套其余函数才能实现,而LOOKUP函数没有正反之分,因此在这方面LOOKUP函数会更加容易实现。
第三, vlookup在查找字符方面,可以使用*号类通配符。LOOKUP是不支持通配符的,但可以使用FIND (查找字符,数据源区域)的形式代替。
在最新版的wps和office365中支持最新的查找函数,xlookup,这个函数更强大,因为我的office是2019,不支持此函数,就不做过多说明了。如果你想了解或使用这个函数,请参考官方使用文档。
- 总结
要执行的操作 | 原因 |
对 range_lookup 使用绝对引用 | 通过使用绝对引用,可以向下填充公式,这样该公式始终在 完全精确的查找区域内查找。 |
请勿将数字或日期值存储为文本。 | 在搜索数字或日期值时,请确保 table_array 第一列中的数 据未存储为文本值。 否则,VLOOKUP 可能返回不正确或意 外的值。 |
对第一列排序 | range_lookup 为 TRUE 时使用 VLOOKUP 之前对 table_array 的第一列排序。 |
使用通配符 | 如果 range_lookup 为 FALSE 且 lookup_value 为文本,您可 在 lookup_value 中使用通配符 - 问号 (?) 和星号 (*)。 问号匹 配任何单个字符。 星号匹配任何字符序列。 如果要查找实际 的问号或星号,则在字符前键入代字号 (~)。 |
请确保您的数据中不包含错误的字符。 | 在第一列中搜索文本值时,请确保第一列中的数据没有前导 空格、尾部空格、直引号(' 或 ")与弯引号(‘或“)不一致 或非打印字符。 否则,VLOOKUP 可能返回意外的值。 要获得准确的结果,请尝试使用 CLEAN 函数或 TRIM 函数 删除单元格中表格值后后面的后置空格。 |
- 常见问题
问题 | 出错原因 |
返回了错误值 | 如果 range_lookup 为 TRUE 或被排除在外,需要对第一列按字母或数字顺序排序。 如果未对第一列排序,可能会返回意外值。 请对第一列排序,或使用 FALSE 以获得精确匹配项。 |
单元格中显示 #N/A |
|
#REF! (显示在单元格中) | 如果 col_index_num 大于 table-array 中的列数,则显示错误值 #REF! 。 |
#VALUE! (显示在单元格中) | 如果 table_array 小于 1,则显示错误值 #VALUE! 。 |
#NAME? (显示在单元格中) | 错误值 #NAME? 通常意味着该公式缺少引号。 |