跳转至

VLOOKUP 函数

1. 函数概述

VLOOKUP(Vertical Lookup,纵向查找)用于在表格的第一列中查找指定值,并返回该行中指定列的对应结果。它最常见的用途是:用一个“键”(如员工编号、商品编码、订单号)去“查表”,取回姓名、价格、部门等信息。

典型场景包括:

  • 按“商品编码”匹配“商品名称/单价”
  • 按“员工工号”匹配“部门/入职日期”
  • 将两张表按共同字段进行数据补全(类似“左连接”效果)

2. 基础语法

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

3. 参数说明

参数 是否必填 含义 说明要点
lookup_value 查找值 你要在表格第一列里寻找的内容(可为单元格或固定值)
table_array 查找区域 包含“查找列 + 返回列”的整个区域;查找发生在该区域的第一列
col_index_num 返回列序号 返回 table_array 中第几列的数据(从 1 开始计数)
[range_lookup] 匹配方式 FALSE(精确匹配)或 TRUE(近似匹配);省略通常等同于 TRUE

常用建议:用于编码/ID 这类精确对应关系时,通常使用 FALSE(精确匹配)。


4. 基础用法示范

下面用一个简单示例来展示 VLOOKUP 的典型写法。假设有“商品表”和“订单表”:

  • 商品表(A:D)

    • A列:商品编码
    • B列:商品名称
    • C列:单价
    • D列:分类
  • 订单表需要根据“商品编码”自动带出名称和单价。

4.1 精确匹配:按编码查商品名称

在订单表中,假设:

  • E2 是商品编码
  • 商品表范围是 A2:D100
  • 要返回商品名称(在商品表的第 2 列)
=VLOOKUP(E2, $A$2:$D$100, 2, FALSE)

解释:

  • $A$2:$D$100 的第一列(A列)查找 E2
  • 找到后返回同一行第 2 列(B列:商品名称)
  • FALSE 表示精确匹配

4.2 精确匹配:按编码查单价

单价在商品表的第 3 列(C列):

=VLOOKUP(E2, $A$2:$D$100, 3, FALSE)

4.3 结合计算:查到单价后计算金额

假设订单数量在 F2,金额在 G2

=F2 * VLOOKUP(E2, $A$2:$D$100, 3, FALSE)

4.4 近似匹配:按分数区间返回等级

近似匹配常用于“区间映射”,例如按分数返回等级:

分数下限 等级
0 D
60 C
75 B
90 A

假设该表在 J2:K5,分数在 H2,则:

=VLOOKUP(H2, $J$2:$K$5, 2, TRUE)

说明要点:

  • TRUE 是近似匹配,会在第一列中找“不大于 lookup_value 的最大值”对应的行
  • 用近似匹配时,第一列通常需要按升序排列,以保证结果符合预期

4.5 固定查找区域:使用绝对引用

当你向下填充公式时,查找区域通常应固定:

  • 使用 $A$2:$D$100 这种绝对引用
  • 或按需固定行/列(如 $A2:$D100

4.6 在多列中定位:动态计算返回列序号

当返回列不固定(比如根据表头选择要返回“单价/分类/名称”),可以让 col_index_num 动态变化,例如用 MATCH 找列号(这里仅展示思路):

=VLOOKUP(E2, $A$2:$D$100, MATCH("单价", $A$1:$D$1, 0), FALSE)

5. 总结

  • VLOOKUP 的核心逻辑:在 table_array第一列lookup_value 查找,找到后返回同一行的第 col_index_num 列结果。
  • 绝大多数“编码/ID 查表补全”场景,推荐使用 FALSE 精确匹配
  • 近似匹配 TRUE 更适合做“分段区间映射”(分数等级、税率区间、运费区间等)。
  • 为了便于复制填充,table_array 常用绝对引用固定区域。
  • 当你的数据结构经常变动或需要更灵活查找时,也可以考虑更现代的替代方案(如 XLOOKUP 或 INDEX+MATCH),但在大量历史表格与通用场景里,VLOOKUP 仍然非常常用。