Courses
VLOOKUP() 是 Google 表格中的一个函数,用于在某一列中搜索一个值,并返回同一行中另一列的匹配值。您提供要查找的内容,指定查找位置,它就会返回所需数据。
当您处理大型数据集、手动查找与匹配数据耗时过长时,它尤其有用。只要需要用共享的键值把两张表连接起来,VLOOKUP() 就是首选函数。
在本指南中,您将学习它的语法、分步用法、导致结果不正确的常见原因,以及何时选择 INDEX MATCH() 或 XLOOKUP() 等替代方案。
Google 表格中 VLOOKUP() 的语法是什么?
VLOOKUP() 的语法为:
=VLOOKUP(search_key, range, index, [is_sorted])
其中:
-
search_key是您要查找的值 -
range是进行搜索的数据表区域 -
index是用于返回结果的列序号 -
[is_sorted]用于定义是否需要精确匹配
如何在 Google 表格中进行 VLOOKUP()?
在 Google 表格中使用 VLOOKUP():
-
确定要查找的值:可以是 ID、姓名或任何唯一值。
-
确定表格区域:确保包含查找值的列是该区域的第一列。
-
选择要返回的数据:即包含结果的列(例如姓名、价格、状态)。
-
在新单元格中输入
VLOOKUP()公式:引用查找值、表格区域以及要返回的列。 -
选择精确或近似匹配(
FALSE或TRUE):大多数情况下,为避免错误结果,建议使用精确匹配(后文详述)。
如果您有如下表格:
|
A(ID) |
B(姓名) |
|
101 |
George |
|
102 |
Sarah |
|
103 |
Lily |
想要查找 ID 102 对应的姓名,可以使用:
=VLOOKUP(102, A2:B4, 2, FALSE)
该公式指示 Google 表格:
- 在 A 列查找 102
- 返回 B 列的值
- 执行精确匹配
结果将得到 Sarah。

VLOOKUP() 示例。图片作者自制。
VLOOKUP() 的工作原理(逐步逻辑)
VLOOKUP() 遵循简单的纵向搜索流程。它总是从所选区域的第一列开始,自上而下逐行扫描,直到找到第一个匹配项。
一旦找到匹配,它会停留在同一行,然后横向移动到您指定的列并返回该值。
其逐步过程如下:
- 从区域的第一列开始
- 沿该列向下搜索
- 找到第一个匹配值
- 沿同一行横向移动
- 从指定列返回数据
假设您要查找员工 ID E1007 的职位名称,可使用以下公式:
=VLOOKUP("E1007", A:G, 5, FALSE)

Google 表格中的 VLOOKUP()。图片作者自制。
该公式将:
-
在 A 列查找
E1007 -
沿同一行横向移动
-
返回第 5 列(职位)
-
给出结果 Software Engineer。
注意:VLOOKUP() 只能从左向右搜索。如果查找列不是区域中的第一列,函数将无法工作。此时,您需要重新排列数据或使用其他函数。我们稍后会介绍。
VLOOKUP() 中的精确匹配 vs 近似匹配
精确匹配仅在值完全一致时返回结果。近似匹配在找不到精确值时返回最接近的可用值,通常基于已排序的数据。
在 VLOOKUP() 中,这由最后一个参数控制。最后一个参数为 FALSE 或 TRUE,很多人会弄错,因为 TRUE 看起来无害,但事实并非如此。
- FALSE 表示仅精确匹配。如果值不存在,返回 #N/A,这其实是有帮助的。
- TRUE 在没有精确匹配时返回最接近且低于它的值,听起来像兜底,但更准确地说是“静默的错误答案”。它还假定数据已排序;若未排序,结果不确定。
建议仅在分层查找(如税率区间、成绩等级带)这类“设计即近似”的场景下使用 TRUE。其他情况下请使用 FALSE。
精确匹配(FALSE)
这会告诉 VLOOKUP():“只有在找到这个精确值时才返回结果。” 例如,公式 =VLOOKUP("E1005", A:G, 7, FALSE) 会查找 E1005,从第 7 列返回薪资,得到 90000。
如果该值不存在,会得到 #N/A 错误。

VLOOKUP() 的精确匹配。图片作者自制。
近似匹配(TRUE)
这会告诉 VLOOKUP():“如果找不到精确匹配,就返回最接近且低于它的值。” 这听起来有用——有时确实如此,但有时会悄悄给出错误答案。
例如,我们的数据集中没有 E1011。最后一个员工 ID 是 E1010。因此使用公式 =VLOOKUP("E1011", A:G, 7, TRUE) 时,VLOOKUP() 不会返回错误,而是返回最接近且较小的匹配 E1010 的值。单元格会显示 88000。
因此即便缺少 E1011,由于 TRUE 允许近似匹配,VLOOKUP() 仍然会给出结果。

VLOOKUP() 的近似匹配。图片作者自制。
现在设想同样的数据被打乱了顺序,而我在公式中输入一个存在的员工 ID,如:=VLOOKUP("E1011", A:G, 7, TRUE)。
这一次,由于查找列未排序且近似匹配依赖已排序的数据,公式会返回错误的薪资。

VLOOKUP() 的近似匹配因列表未排序而出错。图片作者自制。
VLOOKUP() 的常见错误与修复方法
来看一下使用 VLOOKUP() 时最常见的一些问题及其解决方法:
#N/A 错误
#N/A 错误表示 VLOOKUP() 未能找到您所请求的值。
假设公式为:=VLOOKUP("E9999", A:G, 7, FALSE)
如果 E9999 不在该区域的第一列,公式会返回 #N/A。
若表中该值的输入方式不同(如多余空格或文本格式问题),也会发生这种情况。
修复方法:
-
确保该值存在于区域的第一列
-
尽可能使用正确的单元格引用,而非手动输入值
-
如果硬编码文本值,请加上引号
-
去除数据中的前后空格
-
仅在需要精确匹配时使用
FALSE
列序号错误
列序号告诉 VLOOKUP() 要从所选区域的哪一列返回结果。如果序号过大,公式将返回 #REF!。
例如 =VLOOKUP("E1005", A:G, 8, FALSE) 会返回 #REF!,因为 A:G 只有 7 列。

列序号错误导致报错。图片作者自制。
如果列号有效但指向了错误的列,也会得到错误结果。
例如:
=VLOOKUP("E1005", A:G, 5, FALSE)
这将返回职位而非薪资。
修复方法:
- 从所选区域的第一列开始计数
- 检查列号是否与要返回的值相匹配
- 确保该列存在于区域内
近似匹配问题
当您使用 TRUE 时,VLOOKUP() 会查找最接近且较低的匹配,而不是要求精确匹配。
如果输入 =VLOOKUP("E1011", A:G, 7, TRUE) 而数据集中没有 E1011,公式不会报错,而是返回属于 E1010 的 88000。
该结果看起来“像是对的”,但并非精确匹配。
修复方法:
-
需要精确结果时请使用
FALSE -
仅在数据已排序且可接受近似结果时使用
TRUE
区域问题
当所选区域与公式的意图不匹配时,VLOOKUP() 也可能无法工作。
例如,=VLOOKUP("E1005", A:C, 7, FALSE) 会返回 #REF!,因为 A:C 只有 3 列,但公式请求第 7 列。
另一个常见问题是查找列不是区域中的第一列。
看这个公式:
=VLOOKUP("E1005", B:G, 7, FALSE)
此处区域的第一列是 B 列,而非 A 列。由于 VLOOKUP() 只搜索所选区域的第一列,因此无法找到 E1005。
修复方法:
- 确保查找列是区域中的第一列
- 确保区域包含您要返回的列
- 在确定公式前仔细检查所选区域

错误的区域导致报错。图片作者自制。
在 Google 表格中跨工作表使用 VLOOKUP()
您可以通过在区域前添加工作表名称,使用 VLOOKUP() 从其他工作表提取数据。
其格式如下:
=VLOOKUP(search_key, SheetName!range, index, FALSE)
SheetName! 用于告诉公式在哪个工作表中搜索。
假设数据存放在名为 Employees 的工作表中,而您正在另一个工作表中工作。要查找员工 ID E1005 的部门,可使用:
=VLOOKUP("E1005", Employees!A:G, 4, FALSE)
其中:
-
Employees!A:G表示在 Employees 工作表中查找 -
4返回 Department 列
该公式会返回 E1005 的部门。

在 VLOOKUP() 中引用其他工作表。图片作者自制。
当工作表名称包含空格时
如果工作表名称包含空格,请用单引号包裹,如下所示:
=VLOOKUP("E1005", 'Employee Data'!A:G, 7, FALSE)
如果不加引号,公式将无法工作。
Google 表格中 VLOOKUP() 与 INDEX MATCH 的比较
VLOOKUP() 在固定列内搜索并基于位置返回数据,而 INDEX MATCH 通过直接使用行与列引用来查找,因此即使表格结构变化也能正常工作。
VLOOKUP:写起来快,但容易“折断”
您已经看到 =VLOOKUP("E1005", A:G, 7, FALSE) 能够查找 E1005 的薪资。
它在以下情况下表现良好:
- 查找列在左侧
- 表格结构不发生变化
一旦结构变化,问题就来了。
例如:
- 您插入了新列
- 薪资列从第 7 列移到了第 8 列
- 公式仍然使用 7
现在它会在不报错的情况下返回错误的值。
INDEX MATCH:更长,但更稳
用 INDEX MATCH 实现同样的查找:
=INDEX(G:G, MATCH("E1005", A:A, 0))
其中:
-
MATCH()在 A 列中找到E1005的位置 -
INDEX()从 G 列的该位置返回值
该方法不依赖列序号,即使表格变化也能继续工作。

INDEX MATCH 比 VLOOKUP() 更稳健。图片作者自制。
真正有用的场景
当数据不是从左到右排列时,请使用 INDEX MATCH。假设A 列包含员工 ID,而C 列包含姓氏。如果您想按姓氏查找并返回员工 ID,这是一个从右到左的查找。
VLOOKUP() 在不改变表格结构的情况下无法做到,但 INDEX MATCH 可以直接处理:
=INDEX(A:A, MATCH("Wilson", C:C, 0))
无需重新排列数据。
Google 表格中 VLOOKUP() 与 XLOOKUP 的比较
VLOOKUP() 受限于固定结构,而 XLOOKUP() 可在任意方向进行查找。它于 2022 年加入 Google 表格,现在在许多场景下更合适。
假设您想通过姓氏 Wilson 查找员工 ID。这是一个从右到左的查找。VLOOKUP() 需要重排表格才能实现,而 XLOOKUP() 可以直接完成:
=XLOOKUP("Wilson", C:C, A:A)
该公式:
- 在 C 列(姓氏)中搜索
- 返回 A 列(员工 ID)

Google 表格中的 XLOOKUP()。图片作者自制。
XLOOKUP() 更好的原因在于它:
- 可在任意方向工作(左或右)
- 不使用列序号
- 默认返回精确匹配
- 在未找到匹配时允许自定义输出
结语
如果只能给一条建议:把 VLOOKUP() 用在您真正关心的表格上,而不是练习用的表。数据重要时,错误的“杀伤力”不一样。第一次被 TRUE 悄悄算出别人错误薪资时,您就会记住 FALSE 存在的意义。
熟悉之后,尝试不同的匹配类型、调整区域,并留意何时结果开始变得不合理。通常这就是该换用更灵活的 INDEX MATCH() 或 XLOOKUP() 的时机。
FAQs
`VLOOKUP()` 可以配合通配符使用吗?
可以。使用精确匹配时,您可以在搜索键中使用 *(任意数量字符)和 ?(单个字符)。
例如,=VLOOKUP("E10*", A:G, 2, FALSE)
`VLOOKUP()` 能在 Google 表格中进行区分大小写的搜索吗?
不可以。VLOOKUP() 不区分大小写。它会把 “apple” 和 “Apple” 视为相同的值。若要执行区分大小写的查找,需要使用 FILTER() 或 EXACT() 等函数。
为什么 `VLOOKUP()` 有时会返回空白结果?
当匹配到的单元格为空时会出现这种情况,表示公式本身运行正确,但没有可显示的数据。
`VLOOKUP()` 可以引用命名区域吗?
可以。您可以不使用 A:G,而是为区域命名(例如 EmployeeData),并在公式中使用该名称。
示例如下:
=VLOOKUP("E1005", EmployeeData, 7, FALSE)