VLOOKUP没有找到对应的结果,在大多数情况下并不是因为函数本身出现了问题,而是由于数据之间存在着矛盾——表面上看起来都是一样的,但是实际上在格式、空白或者引用逻辑上存在微小的不同。最常见的原因有三种:第一种情况是查找值和数据源的第一列格式不一样,比如一个地方用的是文本型数字“123”,另一个地方则是数值型的123,系统会把它们当作两种不同的东西来处理;第二种情况是在数据里面藏着一些看不见的字符,比如前后都有空格、换行符或者是其他无法打印出来的符号,虽然肉眼很难发现但是会阻碍匹配;第三种情况是公式的下拉过程中没有固定住查找范围,使得引用随着移动而改变位置,或者错误地把不是第一列的数据作为比较的对象。这些都是Excel使用中最容易被忽视却又对工作效率造成很大影响的地方。

一、格式不一致:要进行双向强制转换
如果查找值是文本形式的数字(比如“00123”),但是数据源的第一列却是数值形式的123的话,那么VLOOKUP就会直接判断出两者不匹配,并不会因为设置了单元格格式就有所改变。因此不能只用“设置单元格格式”的方式来表面地修改一下,而是要从本质上进行转换:对于查找值可以采用双负号的方式来进行处理,即=VLOOKUP(--A2,Sheet2!$A$2:$D$1000,2,0);而对于数据源的第一列,则建议使用“数据-分列-下一步-完成”的操作来批量去掉文本前面的零并且转换成标准数值的形式。如果需要保留前面的零(比如工号或者身份证号码),那么就需要把查找值和数据源全部都变成文本的形式,在这两者之前分别加上单引号或者是利用TEXT函数来规范化输出结果,例如=TEXT(A2,"00000")。
第二类是不能看见的字符干扰,要一层层地去查找出并加以消除
空格、换行符、制表符等不可见字符常常存在于复制粘贴的数据之中。第一种方法是利用LEN函数来检验,在空白列里输入=LEN(A2),然后和预期的字符数量进行比较,如果多了1到2位就说明有隐藏的字符;第二种方法是使用CLEAN函数去掉非打印字符(比如换行符),再用TRIM函数去掉开头、结尾以及中间多余的空格,组合起来就是=TRIM(CLEAN(A2));第三种方法如果仍然不符的话可以使用SUBSTITUTE函数一个个地把特殊的符号给替换掉,比如说=SUBSTITUTE(SUBSTITUTE(A2,CHAR(10),""),CHAR(13),"")就可以用来删除回车换行了。最后要把清理过的数据保存成一个新的列,并且把这个新的列作为VLOOKUP的第一参数的第一个字段。
第三种情况就是引用和结构上的错误,即锁定区段以及校对的位置必须是强制性的条件
VLOOKUP要求查找值要放在数据区域的第一列中,否则一定会出现#N/A的结果。如果原始数据的第一列是顺序号或者时间戳的话,需要先用一个辅助列把匹配字段放到最前面,或者是换成INDEX和MATCH的组合来代替它。当公式向下填充的时候,第二个参数一定要用绝对地址的形式表示出来,比如Sheet2!$A$2:$D$1000——按下F4键可以快速地使这个地址固定住;而如果是整个一列的数据引用(例如A:D),虽然不会产生位置上的错误但是也会大大降低计算的速度,在数据条数小于五万个的情况下才可以用上。另外第四项参数最好设置为0来进行精确匹配,如果把它设为1或者不填的话就会变成模糊匹配了,并且很容易造成判断失误。
四、高级保护措施:使用辅助函数来预先阻止错误
为了提高容错率,不要单独使用裸VLOOKUP。可以采用嵌套IFERROR的方式来进行替换,例如:=IFERROR(VLOOKUP(A2,Sheet2!$A$2:$D$1000,2,0),"未找到")来防止错误值影响到报表;还可以再加一层判断是否存在:=IF(COUNTIF(Sheet2!$A$2:$A$1000,A2)=0,"缺失","存在")以确定问题所在之后再做比较。这样的双保险机制已经在很多企业的财务对账模板里得到了证实,并且能够减少80%以上的手动审核时间。
所以VLOOKUP失配的本质就是数据治理的问题,并不是函数本身存在错误。要解决这个问题就需要做到数据清洗准确、条件筛选精确以及格式校对无误这三个方面都不能出错。






评论区 (0)
暂无评论,快来抢沙发吧!
发表评论