在线 Excel 编辑器
免费使用

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 的对比

VLOOKUPXLOOKUP
适用版本所有 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 完全相同。唯一的区别是参数分隔符:在小数点用逗号的地区设置里要写分号。