VLOOKUP 函数用法:语法、示例与常见错误
更新于 2026-10-12 · 免费 · 兼容 Excel 与 Google Sheets
语法
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])快速答案
VLOOKUP 在区域的第一列中查找指定值,并返回同一行中另一列的值。精确匹配写法:=VLOOKUP(A2, $D$2:$E$500, 2, FALSE)——第四参数用 FALSE(或 0)适用于绝大多数场景。出现 #N/A 基本是两种原因:查找值不在区域第一列,或数字被存成文本、单元格里藏着不可见空格。
语法
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])| 参数 | 是否必填 | 含义 |
|---|---|---|
| lookup_value | 必填 | 要查找的值——数字、文本、日期,或单元格引用(如 A2)。 |
| table_array | 必填 | 查找区域。VLOOKUP 永远只在该区域的「第一列」中查找,且只能返回右侧列的值。 |
| col_index_num | 必填 | 返回区域中的第几列,从区域最左侧起算(1 = 查找列本身)。 |
| range_lookup | 选填 | FALSE(或 0)= 精确匹配;TRUE(或 1)= 近似匹配,要求第一列按升序排列。 |
「第一列规则」是大多数 #N/A 错误的根源:查找列必须是 table_array 的最左列,哪怕你真正想要的数据在表格的其他位置。
基础示例
=VLOOKUP(A2, $D$2:$E$500, 2, FALSE)在 D2:E500 中查找 A2 的值,并返回匹配行的第二列。$ 符号锁定区域,公式向下填充时查找范围不会跑偏。
=VLOOKUP(A2, Sheet2!A:C, 3, FALSE)跨工作表查找:Sheet2!A:C 是另一张表上的区域,返回该区域的第三列。
=IFERROR(VLOOKUP(A2, $D$2:$E$500, 2, FALSE), "未找到")用 IFERROR 包裹 VLOOKUP,把生硬的 #N/A 换成友好提示——这是对外表格的标准写法。
除非确实需要近似匹配,请始终加上 FALSE。用 TRUE(或省略第四参数)时,VLOOKUP 会静默返回小于等于查找值的最近一个——结果错了也没有任何报错提示。
常见错误与排查方法
| 错误 | 最常见原因 | 解决办法 |
|---|---|---|
| #N/A | 查找值不在 table_array 的第一列——或者只是「看起来一样」(文本 vs 数字、尾随空格)。 | 检查第一列规则;用 VALUE() 转换文本型数字;先用去空格工具清理不可见字符。 |
| #REF! | col_index_num 超出了 table_array 的实际列数。 | 数的是区域内的列数,不是整张表的列数。 |
| #VALUE! | col_index_num 小于 1(通常是引用损坏),或旧版 Excel 中查找文本超过 255 字符。 | 列序号用 1 或更大的值;超长字符串改用 INDEX/MATCH。 |
| #NAME? | 函数名拼错——或在英文版 Excel 里用了本地化函数名(BUSCARV、SVERWEIS、RECHERCHEV)。 | 输入 =VLOOKUP( 让自动补全完成函数名。 |
从网页粘贴内容带来的尾随空格和不换行空格,是 #N/A 最隐蔽的来源:对 VLOOKUP 来说「NYC 」和「NYC」是两个不同的字符串。查找前先用一键清理把整列空格处理干净。
VLOOKUP 与 XLOOKUP 的对比
| VLOOKUP | XLOOKUP | |
|---|---|---|
| 适用版本 | 所有 Excel 版本(Google Sheets 也支持) | Microsoft 365 与 Excel 2021 及以上 |
| 能否向左查找 | 不能 | 能 |
| 默认精确匹配 | 否——必须手动加 FALSE | 是 |
| 插入列后是否仍准确 | 否——col_index_num 固定不动,可能悄悄错位 | 是 |
| 找不到值时 | #N/A(需要 IFERROR 包裹) | 内置 if_not_found 参数 |
需要发给别人、任何环境都能正常打开的工作簿,或者你在用 Google Sheets——继续用 VLOOKUP。新建的 Microsoft 365 工作簿则优先 XLOOKUP:它一次性解决了第一列规则、FALSE 习惯和 IFERROR 包裹三件事。
Google Sheets 中的 VLOOKUP
Google Sheets 支持与 Excel 完全相同的 VLOOKUP 语法和行为——上面的公式原样粘贴即可使用。
- 精确匹配与近似匹配的行为一致,TRUE 同样要求第一列升序排列。
- 通配符用法相同:「?」匹配单个字符,「*」匹配任意连续字符,「~」用于转义。
- 在以逗号作小数点的区域设置(德国及欧洲、拉美部分地区)中,参数之间要用分号:=VLOOKUP(A2; D2:E500; 2; FALSE)。Excel 在同样设置下也一样。
- 现代 Google Sheets 账号同样有 XLOOKUP,但很多旧共享表格仍依赖 VLOOKUP——为了兼容性值得保留。
局限与实用技巧
- 不能向左查找:查找列永远是区域的第一列。要返回左侧列的值,用 INDEX/MATCH 或 XLOOKUP。
- 只返回第一个匹配——查找列里的重复值会被静默忽略。
- 向下填充前先用 $ 锁定区域,否则第 2 行会去查 D3:E501,第 3 行查 D4:E502,以此类推。
- 近似匹配(TRUE)要求第一列升序排列,否则结果出错且没有任何提示。
- 双击填充柄(选区右下角的小方块)可以把公式一次填充到最后一行数据。
需要从另一个文件批量取回多列数据而不只是一个值?那其实是「表连接」而不是查找——下面的免费浏览器工具不用公式就能完成。
相关工具
相关函数
常见问题
VLOOKUP 在 Excel 里是干什么的?
VLOOKUP(垂直查找)在区域的第一列中搜索某个值,并返回同一行中另一列的内容。它是把价格、姓名、状态等信息从一张大查找表带进当前表格的经典方法。
明明能看到值,为什么 VLOOKUP 返回 #N/A?
通常只是「看起来一样」:一边是文本、另一边是真正的数字,或者文本里带着尾随空格或不换行空格。用 VALUE() 转换文本型数字,或先清理不可见空格,查找就能匹配上。
最后一个参数该用 TRUE 还是 FALSE?
几乎永远用 FALSE(精确匹配)。TRUE 是近似匹配,会静默返回小于等于查找值的最近一个值——而且只有第一列升序排列时结果才正确。
VLOOKUP 能向左查找吗?
不能。VLOOKUP 永远只搜索区域的第一列,且只能返回右侧的列。要返回左侧的列,用 INDEX/MATCH——如果你有 Microsoft 365,也可以用 XLOOKUP。
怎么跨工作表使用 VLOOKUP?
在区域前面加上工作表名:=VLOOKUP(A2, Sheet2!A:C, 3, FALSE)。跨工作簿时引用写成 [Book.xlsx]Sheet2!A:C——不过把两份数据放进同一个工作簿会更可靠。
VLOOKUP 能返回多个匹配结果吗?
不能。VLOOKUP 命中第一个匹配就停。要返回所有匹配,在 Microsoft 365 或 Google Sheets 里用 FILTER,或者用辅助列给重复值编号后再查。
VLOOKUP 在 Google Sheets 里用法一样吗?
一样——语法、匹配模式和通配符都与 Excel 完全相同。唯一的区别是参数分隔符:在小数点用逗号的地区设置里要写分号。
准备好处理你自己的文件了吗?
打开在线关联两个 Excel 表格(按键 Join) — 免费