夜雨聆风学习资料网

ARTICLE · 1186534

Excel 里藏得最深的功能:VLOOKUP 8 个用法 7 个坑

Excel 里藏得最深的功能:VLOOKUP 8 个用法 7 个坑

Excel 里有个函数,几乎人人都写过,但 90% 的人只用过它十分之一的本事——VLOOKUP。

VLOOKUP 只有 4 个参数,但 90% 的人只用过其中一种写法。

语法长这样:

=VLOOKUP(找什么, 在哪找, 返回第几列, 精确还是近似)

四个参数分别是:

参数
含义
要记住的
1
要找的值
这个值必须在查找区域的第 1 列
2
查找区域
建议锁上 $,见坑 5
3
返回第几列
从区域第 1 列开始数,不是从 A 列开始数
4
匹配方式
0 = 精确,1 = 近似。省略不写等于 1

8 个用法,先看目录

#
用法
一句话
1
基础精确查找
最常见的写法,第四参数写 0
2
跨工作表查找
前面加表名
3
批量填充
靠 $ 锁定,往右拖取不同字段
4
区间分档
第四参数写 1,用于评级、提成、阶梯价
5
通配符查找
查"包含"而不是"等于"
6
反向查找
往左查,改用 INDEX+MATCH
7
多条件查找
两个条件拼串,INDEX+MATCH 一次查
8
查不到不留错误值
用 IFERROR 包一层

用法 1 · 基础精确查找

=VLOOKUP(A2, $D$2:$G$100, 2, 0)

在 D 列里找 A2 的值,返回这个区域第 2 列的内容。

第四参数写 0(或 FALSE)。记住它必须写,理由在坑 1。


用法 2 · 跨工作表查找

=VLOOKUP($A2, 基础表!$A:$D, 3, 0)

在第一参数前加 表名! 就行。

如果表名里有空格或特殊符号,要用单引号包起来:

=VLOOKUP($A2, '员工基础表 2026'!$A:$D, 3, 0)

用法 3 · 批量填充(往右拖)

=VLOOKUP($A2, $D:$G, 2, 0)

同一个员工,要一次填出部门、职级、直属领导三个字段。写好这一个公式,往右拖两次。

关键全在 $:

  • $A2
    :锁列不锁行 → 往右拖,查找值还是 A 列;往下拖,行号跟着变
  • $D:$G
    :全锁死 → 查找区域永远不动

如果没锁区域,往右拖一格就会从 D:G 变成 E:H,整张对照表右移一列,结果全错。


用法 4 · 区间分档(近似匹配)

=VLOOKUP(A2, $J$2:$K$5, 2, 1)

第四参数写 1,它就不再是"找相等",而是"找不超过查找值的最大值"。

用在做评级、算提成、阶梯定价上特别合适:

J 列(下限)
K 列(提成比例)
0
3%
1000
5%
5000
8%
20000
12%

输入 3600,它返回 5%——因为它找到的是"不超过 3600 的最大下限"。

前提:J 列必须从小到大排好序。 排序错了,结果就错,而且不会报错。


用法 5 · 通配符查找

=VLOOKUP("*"&A2&"*", $D:$E, 2, 0)

在查找值两边加上 *,含义就从"等于"变成了"包含"。

比如你手上是简称"华东",对照表里是"华东大区销售中心"——直接查查不到,加通配符就能匹配上。

注意:这个方法只对文本有效。


用法 6 · 反向查找

VLOOKUP 只能向右查——要找的值必须在区域第 1 列,返回的列在它右边。

如果想按 G 列的值,去取 B 列的内容(往左查),VLOOKUP 就做不到了。最简单的办法是改用 INDEX + MATCH:

=INDEX($B:$B, MATCH(A2, $G:$G, 0))

INDEX(返回列, MATCH(查找值, 查找列, 0)) 直接告诉 Excel:在 G 列找到 A2,然后去同一行的 B 列取值。不用反转列序,也不用数组公式。


用法 7 · 多条件查找

两个条件才能确定唯一一行的时候,把它们拼成一个字符串去查:

=INDEX($F:$F, MATCH(A2&B2, $D:$D&$E:$E, 0))

如果嫌数组公式麻烦,还有个更省事的做法:在数据源里加一个辅助列,内容是 =D2&E2,然后回归最普通的 VLOOKUP。

不是所有"高级写法"都值得用。能让同事看懂的公式,才是好公式。


用法 8 · 查不到时不留错误值

=IFERROR(VLOOKUP(A2, $D:$G, 2, 0), "未找到")

默认查不到会显示 #N/A。自己看无所谓,但表要交出去的时候,满屏的 #N/A 很难看。

第二参数可以换成任何你想显示的提示,比如 ""(留空)或 0。


7 个坑

1. 第四参数省略 = 近似匹配

=VLOOKUP(A2, D:G, 2)      ← 危险

不写第四参数,Excel 默认按 1(近似匹配)处理。

很多人以为"省略就是精确匹配",这是错的。

后果是:它可能返回一个看起来合理但完全不对的结果,而且不报错。这是本文最该记住的一条。

2. 查找值必须在区域的第一列

=VLOOKUP(A2, $D:$G, 2, 0)   ← 要找的值必须在 D 列

如果要在 A 列查、从 D 列返回,VLOOKUP 做不到。要么用用法 6 的反向查找,要么直接用 INDEX + MATCH。

3. 数字和文本长得一样,但不是一回事

1001 和 "1001" 在 Excel 眼里是两种东西,互相查不到。

从系统导出的编号、工号、订单号,经常是文本格式。判断方法:看它是不是左对齐(文本默认左对齐,数字默认右对齐)。

4. 空格,以及 TRIM 删不掉的那种

从网页或系统复制的数据,常常带着一个看不见的空格。这种空格普通删除键删不掉,TRIM 函数也无效——它的真身是一个看不见的字符:不间断空格。

最彻底的办法是用「查找替换」(Ctrl+H):在"查找内容"里,从原单元格复制那个看不见的空格粘贴进去;"替换为"留空,点"全部替换"。

排查顺序建议:先试 TRIM,还不行就用查找替换清掉那个不可见字符。

5. 区域没锁 $,往右拖就偏了

=VLOOKUP(A2, D:G, 2, 0)      ← 往右拖变成 E:H,全错 =VLOOKUP($A2, $D:$G, 2, 0)   ← 正确

这是"公式一拖就错"最常见的原因。

6. 返回第几列是数出来的

在 D:G 这个区域里,第 3 列是 F。但如果哪天有人在 D 后面插入了一列,第 3 列就变成了 G——你的公式不会提醒你,它只是默默返回错误的数据。

更稳的写法是用 MATCH 动态算列号:

=VLOOKUP($A2, $D:$G, MATCH("职级", $D$1:$G$1, 0), 0)

7. 第一列有重复值,只返回第一个

VLOOKUP 遇到重复值不会报错,只会安静地给你它找到的第一条。

如果你的对照表里有重复(比如同名员工、同一客户的多条记录),它给你的答案可能根本不是你想要的。

这种情况要么先对数据源去重,要么改用多条件查找(用法 7)。


一句话记住

VLOOKUP 的坑,比它的用法更需要记住。

因为用法写错了会报错,坑踩了不会。


相关学习资料