相信大家工作中用到的最多最复杂的查找函数就是 Vlookup了,它真的很强大和实用,解决了工作中 90%的数据查找和匹配问题。我工作中最先接触,用的最多的也是 Vlookup 函数,这里我总结一下我在使用中常遇到的一些问题和使用技巧,希望它能让你 v 的更有成功。此文也献给和我一起共事过的同事,纪念我们在此函数上跳过的种种坑 。。。
相信小的力量,每天进步一点点,坚持带来大改变!
对函数使用比较熟的读者可以跳过第一节直接看函数的常见问题和高级应用。
一、参数介绍及注意事项
先啰嗦一下函数的工作原理,有助于你更好的理解下面的内容。
1. 函数工作原理
直接讲上面的参数比较难懂,先说说它的工作套路吧。例如下面的例子问 Excel 老板 “头头” 的剩余年假。
你直接问 Excel 它肯定会告诉你:“我怎么知道呢,我都没有年假的数据”。OK,现在我给你数据 (也就是H:J,“搜索表区域”,参数2)。接着它又发问了,我不知道老板的员工编码,你的数据里没有员工名称。sorry,老板的编码是 “18110001”(参数1,待搜索单元格)。Excel 开始很卖力的表现,在你数据的第一列从头到尾找 “1811001”。太碰巧了,它就在第二行,完全 match(参数4)毫不费力!!!but, 你想要的是年假,它细看发现年假在数据中的第二列(参数3指定)。有结果了,老板还有 22 天没休,工作狂!Excel,well done!
计算机点说就是在 “搜索表区域” (参数2) 中的第一列从上到下按参数 (4) 指定的方式精确或模糊查找 “待搜索单元格” (参数1) 的值,如有匹配的行则返回 “搜索表区域” 中第 N (用参数 (3) 指定)列的值。无匹配行时返回 #NA。
2. 参数介绍和选参注意事项
- 待搜索单元格:记住必须为一个单元格,或一个数值、字符串以及函数返回值。不能为一整列如 A:A。
- 搜索表区域:待匹配的列必须放为第一列。例如按员工编码、产品编码查找其名称时公司编码不能放在第一列。
- 返回值的列序号:必须为一个数字,第一列从 1 开始。
- 查找方式:用 0 或 FALSE 表示精确查找,1 或 TRUE 表示模糊查找。可选参数,如忽略则用模糊查找。
3. 参数选择技巧
-
这里我要首先要介绍的是怎么快速判断返回值的列序号,起初我是傻傻的用手指一个一个去数的:)
如上图,在工作表的左上角文本框(如红框标注)会显示当前选定单元格在选定区域中的行号和列号,R 表示 Row,C 表示 Column。7C 说明剩余年假在第 7 列。 -
精确查找 vs 模糊查找:精确查找容易理解,就是两个值完全相等。模糊查找是指:在区域的第一列中查找小于并且最接近于单元格值的数值,如下面按成绩评级的例子:
在 F列中找比61小并且最接近61的值,结果为60,它在第 3 行,然后返回它第二列的值 “及格”。 -
搜索表区域的选择,这里我建议按列的方式选取,例如:B:E,选择B到E列。采用这种方式时当表格的行数增加时你不用重新修改公式。无法按列选取时,为了确保公式在向下应用到其他单元格时不发生变动,区域的指定必须采用绝对引用,就是在行列前加上 $。
如上图中的 E 列用了相对引用导致 E6 的结果错误。 -
单元格的相对引用快速切换到绝对引用,例如把上图的 A10:B14 快速切换到 $A B$14。编辑公式时直接在引用如 A10 或 B14 上按快捷键 F4。
二、函数应用常见问题和解决办法
1. 数据类型不匹配
你的数据明明在表里,用 Vlookup 就是 v 不出来呢?数据类型不匹配是个最常见的问题。在应用此公式时必须确保待搜索区域首行的数据类型和单元格的数据类型完全相同,即同为数字、字符串或其他。做到这个确保有时实操起来还是比较难的,这里我列几个小技巧:
- 在做数据的格式转换时,例如把文本转换成数字时注意会丢失前面的 0。如 “0018109” 转换为数字时会自动丢失前面的两个0,变为 18109,这样的问题可能会导致错误的结果。
- V 不出来可能是因为单元格的内容 Excel 认为包含错误,并且也被忽略,导致它无法正确判断其中用到的数据类型。如有必要你可以在 “文件 --> 选项 --> 公式” 的 “错误检查” 栏中点击 “重新设置忽略错误” 显示所有也被忽略的错误,设置完成后内容有误的单元格左上角会自动显示绿色小三角。记着含这些内容的单元格是无法通过更改格式来转换类型的,除非你手动的一一处理小三角。
- 如果错误的单元格很多,一一纠正是不可能的,这里我介绍一个函数 TRIM,它能把待匹配的内容去除前后空白,并转换为文本类型,然后你就能按文本类型来进行 Vlookup。方法如下图:
员工编码为数字,但用来匹配的 E 列数据质量太差,含错误或前后空白,导致 C 列结果有很多 #N/A。此时你要在“员工编码” 后新加一列 F 并用 TRIM 函数把它的内容纠正去空白,然后用同样的函数对单元格(A2)的内容纠正去空,然后用函数 TRIM(A2) 的返回值在 F :G区域查找结果。
2. 含前后空白,制表符、或回车等不可见字符
你可以在单元格编辑模式下查看单元格是否含前后空白、制表符、特殊字符等。另外一个简单的方式查空白、制表符是对单元格内容临时加下划线。这里我介绍一下怎么处理这些特殊的符号:
- 前后有半角空白,直接用 TRIM 函数去除,如上图。
- 全角空白,也就是中文的空格。一是用查找替换功能直接删除单元格内的所有全角空白,二是用公式: SUBSTITUTE(A1, UNICHAR(12288), “”) 替换去除
- 制表符,用查找替换功能直接删除或用公式 SUBSTITUTE(A1, CODE(32), “”) 替换去除
- 回车符,用公式 SUBSTITUTE(A1, CODE(10), “”) 替换去除
- 其他特殊字符请手动处理
3. 满足条件的行不唯一
Vlookup 在找到满足条件的第一行时就返回结果,如下图返回第一行的20,重复的行会被忽略。
如果数据的值不唯一时请在 Vlookup 前对数据进行排序,确保你期望的数据排在前面。
4. 试图进行反向选取返回列
Vlookup 不支持反向选取返回列,如按产品编码返回总库存时,总库存必须在编码的后面。
三、函数的高级应用
1. 按多个单元格的值搜索数据
这个搜索数据的方式在日常工作中有很多需求,例如按仓库和产品编码搜索它的库存。你也可以用 SUMPRODUCT 函数完成,不过这个函数比较难理解。这里我说说怎么用 Vlookup 完成。首先你要对用到的单元格,和数据列用操作符 & 或函数 CONCATENATE 进行连接,然后再应用 Vloookup 函数,见下图:
在产品编码后面加上一列连接仓库和产品的编码,然在在其上搜索连接后的单元格值。
2. 带通配符搜索数据
Vlookup 支持通配符 * 和?进行模糊查找。可以分别使用它们来代替一个或多个真正的字符在搜索区域中查找数据,下图中我分别示范了怎么用通配符做包含、依开头、依结尾、和特定位置含特定文本的查找。
如果你要找的是通配符,请在它前面加 ~ 进行转译,如上图 F6的例子查找名字含 * 的员工。
3. 返回值 #NA 时用指定的值替代
#NA 空值时是不方便于数据汇总的,此时你可以要求用指定的值,如 0 替换它。这里你要用到的一个条件判断函数 IF,它能判断指定的条件,如果满足时返回函数第二个参数指定的值,否则返回第三个参数指定的值。
假如单元格 A1 为分数 89,你可以用函数 IF (A1 >= 60,“及格”,“不及格”) 判断分数是否及格。判断是否为空值用 ISNA 函数,下面我综合起来讲一个查询库存的例子,如无库存时默认用 0 替代。
如上图 D2 先用 ISNA(VLOOKUP(A2, F:G, 2, 0)) 判断 v 出来的结果是否为空,为空时用 0 替代,否则使用 VLOOKUP(A2, F:G, 2, 0) 的值。
全文完!欢迎评论,如果你喜欢这篇文章, 请记得点赞哦,谢谢!
本文为作者原创文章,未经作者允许不得转载。