Excel XLOOKUP 函数 #

函数概览 #

XLOOKUP 是 Excel 2019/365 引入的新一代查找函数,集成了 VLOOKUP、HLOOKUP、INDEX+MATCH 的功能。

text
┌─────────────────────────────────────────────────────────────┐
│                    XLOOKUP 概览                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  XLOOKUP 是 VLOOKUP 的升级版:                               │
│  ✓ 默认精确匹配                                             │
│  ✓ 可以向左查找                                             │
│  ✓ 可以返回多个值                                           │
│  ✓ 内置错误处理                                             │
│  ✓ 支持通配符                                               │
│  ✓ 支持反向查找                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

XLOOKUP 函数 #

语法 #

excel
=XLOOKUP(lookup_value, lookup_array, return_array, 
         [if_not_found], [match_mode], [search_mode])

参数:
- lookup_value: 要查找的值
- lookup_array: 查找范围
- return_array: 返回范围
- if_not_found: 找不到时返回的值(可选)
- match_mode: 匹配模式(可选)
  - 0:精确匹配(默认)
  - -1:精确匹配,找不到返回下一个较小值
  - 1:精确匹配,找不到返回下一个较大值
  - 2:通配符匹配
- search_mode: 搜索模式(可选)
  - 1:从第一项开始搜索(默认)
  - -1:从最后一项开始搜索
  - 2:二分法搜索(升序)
  - -2:二分法搜索(降序)

基本用法 #

excel
=XLOOKUP("产品B", A:A, B:B)              基本查找
=XLOOKUP("产品B", A:A, B:B, "未找到")     带默认值
=XLOOKUP("产品B", A:A, B:C)              返回多列

与 VLOOKUP 对比 #

excel
VLOOKUP:
=VLOOKUP("产品B", A:C, 2, FALSE)
=IFERROR(VLOOKUP("产品B", A:C, 2, FALSE), "未找到")

XLOOKUP:
=XLOOKUP("产品B", A:A, B:B)
=XLOOKUP("产品B", A:A, B:B, "未找到")

XLOOKUP 更简洁,功能更强大

查找示意图 #

text
查找"李四"的电话:

    A          B          C
1   姓名       电话       地址
2   张三       138xxxx    北京
3   李四       139xxxx    上海  ← 找到
4   王五       137xxxx    广州

=XLOOKUP("李四", A:A, B:B)  → 139xxxx

=XLOOKUP("李四", A:A, B:C)  → 返回电话和地址两列

核心功能 #

1. 默认精确匹配 #

excel
VLOOKUP 需要指定 FALSE:
=VLOOKUP("产品B", A:C, 2, FALSE)

XLOOKUP 默认精确匹配:
=XLOOKUP("产品B", A:A, B:B)

2. 内置错误处理 #

excel
VLOOKUP 需要 IFERROR:
=IFERROR(VLOOKUP("产品D", A:C, 2, FALSE), "未找到")

XLOOKUP 内置错误处理:
=XLOOKUP("产品D", A:A, B:B, "未找到")

3. 向左查找 #

excel
VLOOKUP 无法实现:
=VLOOKUP("产品B", B:A, 2, FALSE)  ✗ 错误

XLOOKUP 轻松实现:
=XLOOKUP("产品B", B:B, A:A)  ✓ 正确

4. 返回多列 #

excel
=XLOOKUP("产品B", A:A, B:D)

返回 B、C、D 三列的值
需要横向拖动或使用数组

5. 反向查找 #

excel
从最后一个开始查找:
=XLOOKUP("产品A", A:A, B:B, , 0, -1)

查找最后一个"产品A"对应的值

6. 通配符匹配 #

excel
=XLOOKUP("产品*", A:A, B:B, , 2)

查找以"产品"开头的第一个值

实际示例 #

基本查找 #

text
产品信息:
    A          B          C
1   产品ID     产品名     单价
2   P001       产品A      100
3   P002       产品B      200
4   P003       产品C      150

查询产品名:
=XLOOKUP("P002", A:A, B:B)  → "产品B"

查询单价:
=XLOOKUP("P002", A:A, C:C)  → 200

带默认值:
=XLOOKUP("P004", A:A, B:B, "未知产品")  → "未知产品"

返回多列 #

text
=XLOOKUP("P002", A:A, B:C)

结果:
    A          B
1   产品B      200

需要选中两个单元格,输入公式后按 Ctrl+Shift+Enter(旧版)
或直接按 Enter(Excel 365)

双向查找 #

text
销售数据:
    A          B          C          D
1              1月        2月        3月
2   产品A      100        120        150
3   产品B      200        180        220

查找产品B在2月的销量:
=XLOOKUP("产品B", A2:A3, XLOOKUP("2月", B1:D1, B2:D3))
→ 180

或使用 INDEX+MATCH:
=INDEX(B2:D3, MATCH("产品B", A2:A3, 0), MATCH("2月", B1:D1, 0))

区间查找 #

text
税率表:
    A          B
1   收入       税率
2   0          0%
3   3000       3%
4   12000      10%
5   25000      20%

查找收入15000对应的税率:
=XLOOKUP(15000, A:A, B:B, , -1)
→ 10%

使用 -1 模式:找不到精确匹配时,返回下一个较小值

查找最后一个值 #

text
销售记录:
    A          B
1   日期       销量
2   1月1日     100
3   1月2日     150
4   1月3日     120

查找最后一次记录的销量:
=XLOOKUP(1, B:B, B:B, , 0, -1)
或
=XLOOKUP(LOOKUP(2, 1/(B:B<>""), B:B), B:B, B:B)

简化版(查找最后一个非空值):
=XLOOKUP(TRUE, B:B<>"", B:B, , 0, -1)

高级应用 #

嵌套 XLOOKUP #

excel
=XLOOKUP(XLOOKUP(A1, 表1!A:A, 表1!B:B), 表2!A:A, 表2!B:B)

先在表1查找,再用结果在表2查找

多条件查找 #

excel
=XLOOKUP(1, (A:A="华东")*(B:B="产品A"), C:C)

查找华东区产品A的值

条件求和 #

excel
=SUM(XLOOKUP(A1:A10, B:B, C:C))

批量查找并求和

实战案例 #

案例1:员工信息查询 #

text
员工表:
    A          B          C          D
1   工号       姓名       部门       职位
2   E001       张三       销售部     经理
3   E002       李四       技术部     工程师

查询工号E002的部门:
=XLOOKUP("E002", A:A, C:C)  → "技术部"

根据姓名查工号(向左查找):
=XLOOKUP("李四", B:B, A:A)  → "E002"

查询完整信息:
=XLOOKUP("E002", A:A, B:D)  → 返回姓名、部门、职位

案例2:价格查询 #

text
价格表:
    A          B          C
1   产品ID     产品名     单价
2   P001       产品A      100
3   P002       产品B      200

订单表:
    A          B          C
1   产品ID     产品名     单价
2   P001       =XLOOKUP(A2, 价格表!A:A, 价格表!B:B)
3   P002       =XLOOKUP(A3, 价格表!A:A, 价格表!B:B)

案例3:最近匹配 #

text
查找最接近的值:

数据:
    A          B
1   数值       结果
2   10         A
3   20         B
4   30         C

查找最接近25的值:
=XLOOKUP(25, A:A, B:B, , 1)  → "B"(返回下一个较大值)
=XLOOKUP(25, A:A, B:B, , -1) → "B"(返回下一个较小值)

XLOOKUP vs 其他查找函数 #

text
┌─────────────────────────────────────────────────────────────┐
│                    查找函数对比                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  功能              VLOOKUP  INDEX+MATCH  XLOOKUP            │
│  ─────────────────────────────────────────────────          │
│  精确匹配          需指定    需指定        默认               │
│  向左查找          ✗        ✓            ✓                  │
│  错误处理          需IFERROR 需IFERROR    内置               │
│  返回多列          ✗        ✓            ✓                  │
│  反向查找          ✗        复杂          简单               │
│  通配符            ✓        ✓            ✓                  │
│  区间查找          ✓        ✓            ✓                  │
│  代码简洁度        中等      复杂         简洁               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

小结 #

XLOOKUP 是 Excel 新一代查找函数,功能强大且简洁:

特性 说明
默认精确匹配 无需指定 FALSE
内置错误处理 if_not_found 参数
向左查找 查找和返回范围独立
返回多列 return_array 可以是多列
反向查找 search_mode 参数
通配符 match_mode = 2

接下来,让我们学习 其他引用函数,掌握更多引用技巧。

最后更新:2026-04-11