GUIDE

VLOOKUP 从入门到精通:语法、示例、常见错误一篇搞定

2026.03.04 · 阅读 6 分钟
更新于 2026.03.25

VLOOKUP 是 Excel 中使用频率最高的函数之一。它的作用很简单:已知一个值,去另一个表格里查找对应信息。比如已知员工编号查工资、已知订单号查物流状态、已知商品名查价格。

这篇文章不讲一堆理论,直接从实际场景出发,从最基础的语法讲到高级用法,帮你一次性把 VLOOKUP 弄透。

基础语法:4 个参数

VLOOKUP 的语法只有 4 个参数:

VLOOKUP 语法结构
=VLOOKUP(查找值, 表格范围, 列号, 匹配方式)
查找值 — 你要找的那个值(比如员工编号「A003」)
表格范围 — 去哪个区域找(比如工资表 B2:D100)
列号 — 找到后返回第几列的数据(比如第3列=工资)
匹配方式 — FALSE 精确匹配 / TRUE 近似匹配

绝大多数场景用 FALSE(精确匹配)。只有做价格区间、分数段这类「落在哪个范围」的查找才用 TRUE

场景一:按姓名查工资

◆ 典型情况

你有一张工资表,现在要在另一张表里根据姓名查出对应工资。

▼ 示例表格:工资表(B2:D5)

Excel — 工资表
B 姓名 C 部门 D 工资
2张三技术8000
3李四财务9500
4王五技术7200
5赵六市场8500
蓝 = 查找列(必须在第一列) 绿 = 返回列

公式:

=VLOOKUP("李四", B2:D5, 3, FALSE)

含义:在 B2:D5 的第一列(B列)找「李四」,找到后返回第3列(D列)的值 → 9500

实际使用中,查找值通常不写死,而是引用单元格:=VLOOKUP(A2, B2:D100, 3, FALSE)。这样公式可以往下拖。

场景二:跨表查找

◆ 典型情况

Sheet1 有一列订单号,你想从 Sheet2 的数据表里把对应的物流状态拉过来。

=VLOOKUP(A2, Sheet2!A:C, 3, FALSE)

跨 Sheet 引用用 Sheet名!范围 的写法。如果 Sheet 名有空格或特殊字符,要加单引号:'Sheet 2'!A:C

用整列引用(A:C)比较省事,不用管数据有多少行。但如果数据量超过 10 万行,建议用具体范围(A1:C50000)以提升性能。

场景三:分数段 / 价格区间(近似匹配)

◆ 典型情况

根据分数自动评级:90分以上优秀,80分良好,60分及格,60分以下不及格。

▼ 示例表格:评级对照表(升序排列)

Excel — 评级对照表
E 分数下限 F 等级
0不及格
60及格
80良好
90优秀
=VLOOKUP(75, E1:F4, 2, TRUE)  → 及格

近似匹配的逻辑:找到小于等于查找值的最大值。75 介于 60 和 80 之间,所以匹配到 60 那行 → 返回「及格」。

使用 TRUE(近似匹配)时,第一列必须升序排列,否则结果会出错。

五个最常见的错误

错误1:#N/A — 找不到值

最常见的原因是数据格式不一致。查找值是数字 1001,但表格里存的是文本格式的 "1001",VLOOKUP 认为它们不同。解决方法:用 VLOOKUP(TEXT(A2,"0"), ...)VLOOKUP(VALUE(A2), ...) 统一格式。

另一个常见原因是多余的空格。肉眼看不出来,但「李四」和「李四 」(末尾有空格)是不同的。用 VLOOKUP(TRIM(A2), ...) 去除空格。

还有一种隐蔽的情况:换行符或不可见字符。从网页或系统导出的数据有时带有换行符(CHAR(10))或零宽空格,肉眼完全看不出来。用 CLEAN(TRIM(A2)) 双重清洗可以去掉大部分不可见字符。

错误2:查找值不在第一列

VLOOKUP 只能在表格范围的第一列查找。如果你的查找值在第二列或第三列,VLOOKUP 就无能为力了。这是它最大的限制。

解决方案:用 INDEX + MATCH 组合或 XLOOKUP(Office 365)替代,不受列顺序限制。

错误3:#REF! — 列号超出范围

表格范围只有 3 列(B:D),你写了列号 4,就会报 #REF!。列号是从表格范围的第一列开始计数的,不是从 A 列。

错误4:忘写 FALSE,返回错误结果

第四个参数不填时默认是 TRUE(近似匹配)。大多数场景需要精确匹配,一定要写 FALSE。不写 FALSE 可能不报错,但返回的值是错的——这比报错更危险,因为你可能根本不知道结果是错的。

错误5:下拉填充后范围移位

公式往下拖时,表格范围跟着移位了。比如 B2:D5 变成了 B3:D6。解决方法:用绝对引用锁定范围 $B$2:$D$5,或者用整列引用 B:D

建议养成习惯:VLOOKUP 的第二个参数(范围)永远用绝对引用或整列引用。写完公式后先检查一遍引用方式再下拉填充。

进阶技巧

套 IFERROR 防报错

VLOOKUP 找不到值就显示 #N/A,这在报表里很难看。用 IFERROR 包裹一下:

=IFERROR(VLOOKUP(A2, B:D, 3, FALSE), "未找到")

找到就返回结果,找不到就显示「未找到」。也可以用空字符串 "" 让它显示空白。在做报表时,建议用空字符串而不是"未找到"——这样汇总行的 SUM/AVERAGE 不会报错。

通配符模糊匹配

VLOOKUP 的精确匹配模式(FALSE)支持通配符:* 代表任意多个字符,? 代表单个字符。

=VLOOKUP("*科技*", A:C, 3, FALSE)

这个公式会找到公司名称中包含"科技"的第一条记录,比如"深圳纳米科技有限公司"。适合数据不够规范、需要模糊匹配的场景——比如发票上的公司名经常多字少字,用通配符比精确匹配容错率高。

也可以用单元格拼接通配符:=VLOOKUP("*"&A2&"*", B:D, 3, FALSE),这样 A2 填"科技"就能匹配所有包含"科技"的公司名。

多条件查找

VLOOKUP 原生只支持单条件查找。如果需要同时按"部门"和"姓名"查找,可以用辅助列的方法:新建一列,把两个条件拼接起来(如 =A2&B2,得到"技术部张三"),然后用这个拼接值做 VLOOKUP 的查找值。

=VLOOKUP(E2&F2, A:D, 4, FALSE)

其中 A 列是预先拼接好的"部门+姓名"辅助列。这个方法虽然需要多建一列,但在旧版 Excel 中是多条件查找的标准做法。如果用 Office 365,XLOOKUP + FILTER 的组合更优雅。

VLOOKUP 的局限 & 替代方案

VLOOKUP 虽然好用,但有几个天生的限制:

只能向右查找 — 查找值必须在表格范围的第一列,返回值只能在它右边的列。如果你的数据结构不是这样排的,就得调整列顺序或换函数。

列号是硬编码的数字 — 写了列号 3,如果中间插了一列,原来的第 3 列变成第 4 列,公式就错了。维护起来容易出问题。

只能返回第一个匹配 — 如果查找值有重复,VLOOKUP 只返回第一个找到的,忽略后面的。如果需要返回所有匹配,要用 FILTER 函数。

性能问题 — 在大数据量(10 万行以上)的表格中,VLOOKUP 会明显变慢,尤其是用整列引用(A:D)时。可以用 INDEX+MATCH 替代,或者缩小查找范围。

如果这些限制困扰你,可以考虑:

替代方案优势适用版本
XLOOKUP不限方向、语法更直观、原生支持默认值Office 365 / 2021+
INDEX + MATCH任意方向查找、列号自动适应所有版本
FILTER返回所有匹配(不只是第一个)Office 365 / 2021+
Power Query处理大数据量合并,不写公式Excel 2016+

不过说实话,大部分日常办公场景用 VLOOKUP 就够了。上面提到的限制只在特定情况下才会遇到,不需要为了"更高级"而放弃最熟悉的工具。

VLOOKUP 公式速查卡

需求公式
精确匹配=VLOOKUP(A2, $B$2:$D$100, 3, FALSE)
找不到时显示空白=IFERROR(VLOOKUP(A2, B:D, 3, FALSE), "")
模糊匹配(包含)=VLOOKUP("*"&A2&"*", B:D, 3, FALSE)
近似匹配(分数段)=VLOOKUP(A2, $F$2:$G$6, 2, TRUE)
多条件(辅助列法)=VLOOKUP(E2&F2, A:D, 4, FALSE)
跨工作表=VLOOKUP(A2, Sheet2!$A:$C, 3, FALSE)
ESC