VLOOKUP 函数
适用范围
Microsoft 365 专属 Excel, Microsoft 365 Mac 版专属 Excel, Excel 网页版, Excel 2024, Excel 2024 for Mac, Excel 2021, Excel 2021 for Mac, Excel 2019, Excel 2016, iPhone 版我的 Office
1. 函数简介
需要在表格或区域中按行查找内容时,可以使用 VLOOKUP 函数。例如,按部件号查找汽车部件的价格,或根据员工 ID 查找员工姓名。其基本形式为:
=VLOOKUP(要查找的内容, 要查找的位置, 返回值所在的列号, 近似或精确匹配 — 以 1/TRUE 或 0/FALSE 表示)推荐
Excel 新版本提供了 XLOOKUP 函数,是 VLOOKUP 的改进版本,可在任意方向查找,默认返回精确匹配,建议优先使用。
2. 语法
VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])| 参数 | 选填 | 说明 |
|---|---|---|
| lookup_value | 必需 | 要查找的值,必须位于 table_array 的第一列。 |
| table_array | 必需 | 包含查找值和返回值的单元格区域。 |
| col_index_num | 必需 | 区域中要返回的值所在的列号(从 1 开始计数,最左侧列为 1)。 |
| range_lookup | 可选 | 匹配方式:FALSE 或 0 表示精确匹配(推荐);TRUE 或 1 表示近似匹配。默认为 TRUE。 |
3. 示例
3.1. 按姓名查找
在 B2:E7 区域的第一列中查找 "Fontana",返回第 2 列对应的名字:
=VLOOKUP("Fontana", B2:E7, 2, FALSE)
注意
查找文本值时必须加引号,否则会返回 #NAME? 错误。
3.2. 精确匹配查找
根据员工编号 102,在 A2:C7 区域的第 2 列中查找姓氏:
=VLOOKUP(102, A2:C7, 2, FALSE)
3.3. 跨工作表查找
从其他工作表中查找数据:
=VLOOKUP(A2, '客户信息'!A:F, 3, FALSE)3.4. 配合 IF 与 ISNA 处理未找到的情况
使用 IF 和 ISNA 函数,在查找不到结果时返回自定义提示,而不是 #N/A 错误:
=IF(ISNA(VLOOKUP(105, A2:E7, 2, FALSE)), "找不到员工", VLOOKUP(105, A2:E7, 2, FALSE))
3.5. 查找日期并计算年龄
VLOOKUP 可以返回员工出生日期,再配合 YEARFRAC 和 INT 计算年龄:
=INT(YEARFRAC(DATE(2014,6,30), VLOOKUP(105,A2:E7,5,FALSE), 1))
3.6. 查找不到时显示自定义提示
使用 IF 和 ISNA 判断 VLOOKUP 是否返回 #N/A,并将错误替换为自定义提示:
=IF(ISNA(VLOOKUP(105,A2:E7,2,FALSE)), "找不到员工", VLOOKUP(105,A2:E7,2,FALSE))
4. 实用技巧
4.1. VLOOKUP 只能从左向右查找
VLOOKUP 只能从左向右查找,查找值必须位于区域的第一列;如果数据结构无法满足这一点,可改用 XLOOKUP 或 INDEX+MATCH 组合;
4.2. 使用精确匹配时
使用精确匹配时,建议始终将 range_lookup 设为 FALSE;使用近似匹配(TRUE)时,第一列必须按升序排列,否则可能返回错误结果;
4.3. 向下填充公式时
向下填充公式时,对 table_array 使用绝对引用(如 $A$2:$C$7),避免查找区域随单元格位置发生偏移;
4.4. 不要将数字或日期值存储为文本
不要将数字或日期值存储为文本,否则查找可能失败或返回 #N/A;
4.5. 查找文本时可使用通配符
查找文本时可使用通配符:问号 ? 匹配任意单个字符,星号 * 匹配任意长度的字符序列;
4.6. 如果数据中可能包含前导空格、不一致的引号等错误字符
如果数据中可能包含前导空格、不一致的引号等错误字符,可先用 CLEAN 或 TRIM 函数清理后再查找。
常见错误及处理方式:
| 错误值 | 原因 |
|---|---|
#N/A | 精确匹配(FALSE)时未找到匹配值;或近似匹配(TRUE)时查找值小于第一列的最小值。 |
#REF! | col_index_num 大于 table_array 的列数。 |
#VALUE! | col_index_num 小于 1。 |
#NAME? | 公式中的文本值缺少引号。 |
#SPILL! | 使用整列引用导致隐式交集,可改用单元格引用或 @ 运算符。 |