从一堆乱表到能看的报表,中间有六步
拿到一张乱表,多数人第一反应是开始改。 本文从合集的角度讲从一堆乱表到能看的报表,中间有六步,给出6条可执行方法、1个真实案例和2个常见坑。
VLOOKUP 大概是 Excel 里最常被写、也最常出错的函数。它的麻烦之处在于:写错了不报错,直接给你一个错误答案。
下面三个坑,我几乎在每家公司都见过。
最典型:一边的工号是数字 `10086`,另一边是文本 `'10086`。
肉眼看一样,VLOOKUP 认为是两个东西,返回 `#N/A`。
怎么判断:选中这一列,看有没有绿色小三角(文本型数字的标记);或者比较对齐方式——数字默认右对齐,文本默认左对齐。
怎么修:
最稳的做法是在源头上统一,而不是每个公式都套一层转换。否则你会有一堆看不懂的嵌套。
这是最难查的。单元格里是「张三 」,多了一个空格。显示上看不出来,VLOOKUP 就是查不到。
怎么查:`=LEN(A2)` 和 `=LEN(TRIM(A2))`,两个值不一样,就有多余空格。
怎么修:
还有一种更隐蔽的:不间断空格(从网页复制来的 ` `)。`TRIM` 清不掉,得用 `=SUBSTITUTE(A2,CHAR(160),"")`。
VLOOKUP 的第四个参数是「近似匹配 / 精确匹配」。省略不写时,默认是 TRUE(近似匹配)。
这意味着:找不到完全一样的值,它会返回「比它小的最大值」那一行。
查工号、查姓名时,这个行为是灾难。你会拿到一个完全无关的人的数据,而且不报错。
所以:永远写 0 或 FALSE。
`=VLOOKUP(A2,Sheet2!A:C,3,0)`
唯一用得上 TRUE 的场景是区间查找,比如按分数段定等级、按金额定折扣。这时候数据必须按升序排列,否则结果随机。
查找值不在第一列。VLOOKUP 只能从左往右查。要找的值在 B 列、要返回 A 列,它做不到。
解决办法:用 `INDEX+MATCH`,或者新版 Excel 的 `XLOOKUP`。
`=XLOOKUP(A2,Sheet2!B:B,Sheet2!A:A,"未找到")`——不用管列顺序,还能直接指定找不到时返回什么。
返回的是公式结果,不是值。原表如果是公式算出来的,复制粘贴时可能带过来错误引用。查完记得「选择性粘贴 → 值」固化。
查到 `#N/A` 时,按这个顺序试,基本三分钟能定位:
几千行的表,不可能一行行看 `#N/A`。分两列做:
D 列(放结果):
=IFERROR(VLOOKUP(A2,S:S,3,0),"")
E 列(放判断):
=IF(D2="","查不到",IF(D2=0,"结果为零","正常"))
然后用筛选,把「查不到」的挑出来一次性处理。
「结果为零」这一档要单独看。它不一定是错的——有些数据本来就是 0——但在对账场景里,零往往意味着匹配到了一行空值。这比 `#N/A` 危险,因为它看起来很正常。
还有一种:结果是对的,但行错位了。VLOOKUP 按区域返回,如果源表排过序、或者中间插过行,整列结果会错一行。核对方法是随便挑三行,回源表反查。
新版本 Excel 和 WPS 都已经支持 XLOOKUP,它在几个地方直接解决了上面的问题:
写法:=XLOOKUP(A2,S:S,R:R,"未找到")——在 S 列找 A2,返回同行的 R 列。
但有个现实问题:如果文件要发给用旧版 Excel 的同事,XLOOKUP 会显示 `#NAME?`。对外发文件前,把公式结果选择性粘贴成值。
VLOOKUP 最大的风险不是不会写,是「以为写对了」。
凡是拿它做对账、做合并的,出结果后抽三行手工核对一遍。三行,两分钟,能避免一次在会上被问住。