做表做到半夜,VLOOKUP又报错了。屏幕前的你,有没有一拳砸过去的冲动?我有。真的,昨天刚被它坑了一回。
那个熟悉的#N/A,到底哪里不对?
最常见的,就是#N/A。它告诉你“没找到”。但明明数据就在那里啊!检查三样东西:一是查找值真存在吗?二是两边的格式一致不?尤其文本型数字和数值型数字,Excel可不认。三是……有没有多余的空格。对,空格。数据从系统导出来,总带些看不见的小尾巴。用TRIM清一下,立马老实。
有一次,我眼睛都看直了,就是找不到错。后来发现,查找区域选的没问题,但查找值在另一张表里有个前导空格。绿色小三角都不提醒!气不气?数据格式不一致,最常见的就是‘文本型数字’。看着是数字,左上角有个小绿三角。这个时候,你选中那一列,点一下感叹号,转为数字。瞬间治愈。或者用VALUE函数强制转。但说到底,源头数据干净点,啥事没有。对吧?

#REF!?你是不是多删了一列?
这个报错,多半是引用的列号超过了区域的总列数。比如你的VLOOKUP第三个参数写的是4,但你选的区域只到C列(3列)。那就完蛋。#REF! 出现时,别慌,数数列。真的,我刚开始用的时候,经常因为插入或删除了列,原来写的6就变成了无效引用。后来学乖了,能用表名引用就用表名,或者干脆改用INDEX+MATCH。不过话说回来,VLOOKUP还是快。
有个小窍门:选择区域后,按住Shift+Ctrl+方向键,能快速看到选了多少行多少列。虽然不直接告诉你列号,但能帮你目测。对吧,省得去点列标签数ABCDE……数到Z后面脖子都酸了。

拖动填充就废掉,锁定区域啊兄弟
这也是新手杀手。公式写得漂漂亮亮,往下一拖,结果全变了。因为查找区域在相对引用下跑了。比如你在F2写=VLOOKUP(E2,A:B,2,0),拖到F3就变成VLOOKUP(E3,A:B,3,0),区域是没变(A:B还是A:B),但如果你区域是A1:B100,拖下去就会变成A2:B101。嗯?你试过吗?所以要么用$锁死,像$A$1:$B$100,要么直接选整列A:B。省心。不过选整列有点浪费资源,数据多的时候计算慢。看情况。有一次,我做工资表,几千行数据,VLOOKUP核对。因为忘加$,拖下来前几百行都对,后面全错。等到发现,已经半夜两点了。那种绝望,差点把鼠标摔了。所以现在,写完公式第一件事,就是查绝对引用。还有个小快捷方式:选中区域后按F4,能快速切换引用方式,不用手打美元符号。
还有更隐蔽的:第四个参数。0代表精确匹配,1或省略代表模糊匹配。多少人没写第四个参数,结果出来一串莫名其妙的数字。讲真,永远带着那个0,或者写FALSE。我习惯写0,少打几个字母。
除了VLOOKUP,还真有几招更利索
如果你用的是Office 365,或者Excel 2021,XLOOKUP真香。一个函数搞定向左查找、多条件、找不到返回啥。再也不用数第几列了。但是,公司里还有大批2016、2019的用户,VLOOKUP还是基本功。别跟我说INDEX+MATCH,那东西灵活,但写起来长。我脑子内存有限,能记住VLOOKUP就不错了。不过XLOOKUP也有坑,参数顺序跟VLOOKUP不一样。刚切过去的时候,我老是写错。而且同事的电脑没这个函数,传个表过去就报错。兼容性还是头疼。
对了,有个野路子:IFERROR包一层。=IFERROR(VLOOKUP(…),”没找到”),这样起码报表不会飘红,领导以为你数据有误。实则只是没匹配上。不过注意,这会掩盖真正的错误,用的时候心里要有数。
最后吐个槽。微软为啥不把VLOOKUP升级一下?默认精确匹配就那么难吗?每次打那个逗号0,感觉手指都起茧了。写了这么多,其实Excel技巧就一个字:练。摔过的坑,下次就不会再摔了。但偶尔还是会摔,因为最新版本的Excel又给你整个新花样。哎,学无止境。好了,敲完这行就去睡觉。Excel永远是那个能让你半夜惊醒的软件。
我问答网