提示: 尝试使用 新的 XLOOKUP 函数,这是 VLOOKUP 的改进版本,它可朝任何方向工作,并默认返回精确匹配项,使其比其前置任务更易于使用。

当需要按行查找表格或区域内容时,请使用 VLOOKUP。 例如,按部件号查找汽车部件的价格,或根据员工 ID 查找员工姓名。

在这一最简单的形式中,VLOOKUP 函数表示:

=VLOOKUP (要查找的项、要查找位置、区域中包含要返回的值的列号、返回近似匹配或精确匹配 - 指示为 1/TRUE 或 0/FALSE) 。

你的浏览器不支持视频。

提示: VLOOKUP 的秘诀在于组织数据,这样您查找的值(水果)位于要查找的返回值(金额)的左侧。

使用 VLOOKUP 函数在表中查找值。

语法 

VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup])

例如:

  • =VLOOKUP (A2,A10:C20,2,TRUE)

  • =VLOOKUP("袁",B2:E7,2,FALSE)

  • =VLOOKUP (A2,"客户端详细信息"!A:F,3,FALSE)

参数名称

说明

lookup_value   (必需参数)

要查找的值。 要查找的值必须列于在参数参数中指定的单元格table_array列中。

例如,如果 表数组 跨单元格 B2:D7,则lookup_value必须列 B。

Lookup_value 可以是值,也可以是单元格引用。

Table_array   (必需参数)

VLOOKUP 在其中搜索 lookup_value 和返回值的单元格区域。 可以使用命名区域或表,并且可以在参数中使用名称,而不是单元格引用。 

单元格区域的第一列必须包含lookup_value。 单元格区域还需要包含要查找的返回值。

了解如何选择工作表中的区域

col_index_num   (必需参数)

对于包含 (的列,列号table_array) 从 1 开始。

range_lookup   (可选参数)

一个逻辑值,该值指定希望 VLOOKUP 查找近似匹配还是精确匹配:

  • 近似匹配 - 1/TRUE 假定表中的第一列按数字或字母顺序排序,然后搜索最接近的值。 这是未指定值时的默认方法。 例如,=VLOOKUP (90,A1:B100,2,TRUE) 。

  • 完全匹配 - 0/FALSE 将搜索第一列中的确切值。 例如,=VLOOKUP ("Smith",A1:B100,2,FALSE) 。

如何开始

您需要四条信息才能构建 VLOOKUP 语法:

  1. 要查找的值,也被称为查阅值。

  2. 查阅值所在的区域。 请记住,查阅值应该始终位于所在区域的第一列,这样 VLOOKUP 才能正常工作。 例如,如果查阅值位于单元格 C2 内,那么您的区域应该以 C 开头。

  3. 区域中包含返回值的列号。 例如,如果指定 B2:D11 作为区域,则应该将 B 计为第一列,将 C 作为第二列,以此类比。

  4. (可选)如果需要返回值的近似匹配,可以指定 TRUE;如果需要返回值的精确匹配,则指定 FALSE。 如果没有指定任何内容,默认值将始终为 TRUE 或近似匹配。

现在将上述所有内容集中在一起,如下所示:

=VLOOKUP (查找值、包含查找值的范围、包含返回值的范围中的列号、近似匹配 (TRUE) 或精确匹配 (FALSE) ) 。

示例

下面是有关 VLOOKUP 的几个示例:

示例 1

=VLOOKUP (B3,B2:E7,2,FALSE) 

VLOOKUP 在 table_array B2:E7 的第一列 (B) 中查找 Fontana,然后从 table_array 的第二列 (列 C) 返回 Olivier。  False 返回完全匹配项。

示例 2

=VLOOKUP (102,A2:C7,2,FALSE) 

VLOOKUP 在 A2:C7 区域的第二列 (列 B) 中查找 102 (lookup_value) 姓氏的完全匹配项 (FALSE) ,并返回 Fontana。

示例 3

=IF (VLOOKUP (103,A1:E7,2,FALSE) ="Souse","Located","Not found") 

IF 检查 VLOOKUP 是否返回 Sousa 作为员工在 A1:E7 (lookup_value) 103 (table_array) 。 由于对应于 103 的姓氏是 Leal,因此 IF 条件为 false,并显示"未找到"。

示例 4

=INT (YEARFRAC (DATE (2014,6,30) ,VLOOKUP (105,A2:E7,5,FLASE) ,1) ) 

VLOOKUP 在 A2:E7 范围 (table_array) 中查找对应于 109 (lookup_value) 的员工的出生日期,并返回 03/04/1955。 然后,YEARFRAC 从 2014/6/30 中减去此出生日期并返回一个值,然后由 INY 将其转换为整数 59。

示例 5

如果 (ISNA (VLOOKUP (105,A2:E7,2,FLASE) ) =TRUE,"找不到员工",VLOOKUP (105,A2:E7,2,FALSE) ) 

IF 检查 VLOOKUP 是否返回列 B 中 105 (lookup_value) 。 如果 VLOOKUP 找到姓氏,IF 将显示姓氏,否则 IF 返回找不到员工。 ISNA 确保如果 VLOOKUP 返回 #N/A,则错误将替换为"找不到员工",而不是#N/A。



本示例中的返回值为 Burke,这是对应于 105 的姓氏。

可以使用 VLOOKUP 将多个表合并为一个表,只要其中一个表具有与其他所有表通用的字段。 如果需要与不支持多个表作为数据源的数据功能的较旧版本的 Excel 用户共享工作簿,此功能特别有用 - 通过将源合并到一个表中,将数据功能的数据源更改到新表,数据功能可在较旧的 Excel 版本 (中使用,但数据功能本身受较旧版本) 的支持。

包含使用 VLOOKUP 从其他表获取数据的列的工作表

此处,列 A-F 和 H 具有仅使用工作表上值的值或公式,其余列使用 VLOOKUP 和列 A (客户端代码) 和 B 列 B 的值 (Attorney) 从其他表获取数据。

  1. 将具有公用字段的表复制到新工作表,并命名。

  2. 单击 "> Data Tools > 关系" 打开"管理关系"对话框。

    "管理关系"对话框
  3. 对于列出的每个关系,请注意以下事项:

    • 链接表的字段 (对话框的括号中列出的) 。 这是 VLOOKUP lookup_value的公式。

    • 相关查找表名称。 这是 VLOOKUP table_array中的公式。

    • 字段 (列) "相关查找表"中,该表中包含新列中的数据。 此信息不会显示在"管理关系"对话框中 - 您必须查看相关查找表,以查看要检索的字段。 您需要记下 A=1 (的) - 这是公式 col_index_num的列 号。

  4. 若要向新表添加字段,请在第一个空列中使用在步骤 3 中收集的信息输入 VLOOKUP 公式。

    在我们的示例中,列 G使用 (lookup_value) 从"代理人"工作表表的第四列 (col_index_num = 4) 获取"帐单费率"数据,即 tblAttorneys (table_array) ,公式为 =VLOOKUP ([@Attorney],tbl_Attorneys,4,FALSE) 。

    该公式还可使用单元格引用和区域引用。 在我们的示例中,它将是 =VLOOKUP (A2,'Attorneys'!A:D,4,FALSE) 。

  5. 继续添加字段,直到拥有所需的所有字段。 如果您尝试准备包含使用多个表的数据功能的工作簿,请将数据功能的数据源更改为新表。

问题

出错原因

返回了错误值

如果 range_lookup 为 TRUE 或被排除在外,需要对第一列按字母或数字顺序排序。 如果未对第一列排序,可能会返回意外值。 请对第一列排序,或使用 FALSE 以获得精确匹配项。

单元格中显示 #N/A

  • 如果 range_lookup 为 TRUE,并且 lookup_value 中的值比 table_array 的第一列中的最小值小,将显示错误值 #N/A。

  • 如果 range_lookup 为 FALSE,则错误值 #N/A 表示未找到精确匹配项。

有关在 VLOOKUP 中解决 #N/A 错误的详细信息,请参阅如何在 VLOOKUP 函数中更正 #N/A 错误

#REF! (显示在单元格中)

如果 col_index_num 大于 table-array 中的列数,则显示错误值 #REF! 。

有关在 VLOOKUP 中解决 #REF! 错误的详细信息,请参阅如何更正 #REF! 错误.

#VALUE! (显示在单元格中)

如果 table_array 小于 1,则显示错误值 #VALUE! 。

有关在 VLOOKUP 中解决 #VALUE! 错误的详细信息,请参阅 如何在 VLOOKUP 函数中更正 #VALUE! 错误.

#NAME? (显示在单元格中)

错误值 #NAME? 通常意味着该公式缺少引号。 要查找人员的姓名,请确保在公式中的姓名左右加上引号。 例如,在 =VLOOKUP("袁",B2:E7,2,FALSE) 中输入姓氏“"袁"”。

有关详细信息,请参阅如何更正 #NAME! 错误.

Excel 中的 #SPILL! (显示在单元格中)

此特定 #SPILL! 错误 通常意味着公式依赖于查找值的隐式交集,并且使用整列作为引用。 例如,=VLOOKUP (A:A,A:C,2,FALSE) 。 可以使用 @ 运算符定位查找引用来解决此问题,如下所示:=VLOOKUP (@A:A,A:C,2,FALSE) 。 或者,可以使用传统的 VLOOKUP 方法并引用单个单元格而不是整个列:=VLOOKUP (A2,A:C,2,FALSE) 。

要执行的操作

原因

range_lookup 使用绝对引用

通过使用绝对引用,可以向下填充公式,这样该公式始终在完全精确的查找区域内查找。

了解如何使用绝对单元格引用

请勿将数字或日期值存储为文本。

在搜索数字或日期值时,请确保 table_array 第一列中的数据未存储为文本值。 否则,VLOOKUP 可能返回不正确或意外的值。

对第一列排序

range_lookup 为 TRUE 时使用 VLOOKUP 之前对 table_array 的第一列排序。

使用通配符

如果 range_lookup 为 FALSE 且 lookup_value 为文本,您可在 lookup_value 中使用通配符 - 问号 (?) 和星号 (*)。 问号匹配任何单个字符。 星号匹配任何字符序列。 如果要查找实际的问号或星号,则在字符前键入代字号 (~)。

例如,=VLOOKUP ("Fontan?",B2:E7,2,FALSE) 将搜索最后一个字母可能有所不同的 Fontana 的所有实例。

请确保您的数据中不包含错误的字符。

在第一列中搜索文本值时,请确保第一列中的数据没有前导空格、尾部空格、直引号(' 或 ")与弯引号(‘或“)不一致或非打印字符。 否则,VLOOKUP 可能返回意外的值。

要获得准确的结果,请尝试使用 CLEAN 函数TRIM 函数删除单元格中表格值后后面的后置空格。

需要更多帮助吗?

你始终可以在 Excel 技术社区中咨询专家或在 Answers 社区获取

另请参阅

快速参考卡:VLOOKUP 刷新
快速参考卡:VLOOKUP 疑难解答提示
如何更正 VLOOKUP #VALUE的 #VALUE! 错误
如何更正 VLOOKUP 函数的 #N/A 错误
Excel 中的公式概述
如何避免损坏的公式
检测公式中的错误
Excel 函数(按字母顺序)
Excel 函数(按类别列出)
VLOOKUP(免费预览)

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

你对翻译质量的满意程度如何?

哪些因素影响了你的体验?

是否还有其他反馈?(可选)

谢谢您的反馈意见!

×