第 6 章:高级函数与数组公式¶
从 VLOOKUP 到 XLOOKUP——掌握 Excel 的查找引用引擎
查找与引用函数是 Excel 中最常用的高级函数。本章从经典的 VLOOKUP 出发,介绍更强大的 XLOOKUP 和 INDEX-MATCH 组合,以及动态数组函数。
6.1 VLOOKUP:经典但有限¶
VLOOKUP 的四个参数¶
| 参数 | 说明 | 注意事项 |
|---|---|---|
| 查找值 | 要查找的内容 | 必须在查找范围的第一列 |
| 查找范围 | 包含查找值和返回值的区域 | 查找值必须在第一列 |
| 返回列号 | 返回值在第几列 | 从查找范围第一列开始数 |
| 匹配模式 | FALSE=精确匹配,TRUE=近似匹配 | 建议始终使用 FALSE |
VLOOKUP 的三大局限¶
| 局限 | 说明 | 解决方案 |
|---|---|---|
| 只能向右查找 | 查找值必须在第一列 | 使用 XLOOKUP 或 INDEX-MATCH |
| 列号硬编码 | 插入/删除列后公式出错 | 使用 XLOOKUP 或 INDEX-MATCH |
| 默认近似匹配 | 第四个参数省略时默认 TRUE | 始终显式写 FALSE |
VLOOKUP 的陷阱
=VLOOKUP(A1,B:C,2) —— 第四个参数省略,默认近似匹配,可能返回错误结果。 永远写全四个参数:=VLOOKUP(A1,B:C,2,FALSE)
6.2 XLOOKUP:VLOOKUP 的终结者¶
XLOOKUP 的语法¶
实战:XLOOKUP 替代 VLOOKUP
XLOOKUP 的优势: - 查找范围和返回范围分离, 不要求查找值在第一列 - 可以向左查找 - 自带错误处理(第四个参数) - 插入/删除列不影响公式
XLOOKUP 的高级用法¶
| 用法 | 公式示例 | 说明 |
|---|---|---|
| 反向查找 | =XLOOKUP(A2,C:C,B:B) |
在 C 列查找,返回 B 列 |
| 多条件查找 | =XLOOKUP(A2&B2,A:A&B:B,C:C) |
连接多列作为查找键 |
| 返回多列 | =XLOOKUP(A2,B:B,C:E) |
一次返回多列结果 |
| 模糊匹配 | =XLOOKUP(A2,B:B,C:C,,-1) |
第五参数:-1 精确或次小 |
| 从后往前找 | =XLOOKUP(A2,B:B,C:C,,,-1) |
第六参数:-1 从后往前 |
XLOOKUP 的可用性
XLOOKUP 在 Excel 2021 和 Microsoft 365 中可用。如果你使用的是 Excel 2019 或更早版本,请使用 INDEX-MATCH 替代。
6.3 INDEX-MATCH:万能组合¶
为什么需要 INDEX-MATCH?¶
INDEX-MATCH 是 VLOOKUP 出现之前的"万能查找方案",至今仍是兼容性最好的方案。
| 函数 | 作用 | 比喻 |
|---|---|---|
MATCH |
找到查找值在第几行 | GPS 定位——找到坐标 |
INDEX |
返回该行指定列的值 | 取货——根据坐标拿东西 |
实战:INDEX-MATCH 双向查找
这实现了"根据姓名和月份查找销售额"——先 MATCH 找到行号,再 MATCH 找到列号,最后 INDEX 取值。
INDEX-MATCH vs VLOOKUP vs XLOOKUP¶
| 对比维度 | VLOOKUP | INDEX-MATCH | XLOOKUP |
|---|---|---|---|
| 向左查找 | ❌ | ✅ | ✅ |
| 列插入安全 | ❌ | ✅ | ✅ |
| 多条件查找 | 需要辅助列 | ✅ | ✅ |
| 语法简洁 | ⭐⭐⭐ | ⭐ | ⭐⭐⭐ |
| 兼容性 | 所有版本 | 所有版本 | 2021+ / 365 |
| 性能 | 中等 | 较快 | 较快 |
6.4 动态数组函数(Microsoft 365)¶
什么是动态数组?¶
传统公式返回单个值, 动态数组公式 可以自动"溢出"到相邻单元格,返回多个结果。
核心动态数组函数¶
| 函数 | 用途 | 示例 |
|---|---|---|
FILTER |
按条件筛选 | =FILTER(A2:C100,B2:B100="销售部") |
SORT |
排序 | =SORT(A2:C100,2,-1) 按第 2 列降序 |
SORTBY |
按指定列排序 | =SORTBY(A2:C100,B2:B100,1) |
UNIQUE |
去重 | =UNIQUE(A2:A100) |
SEQUENCE |
生成序列 | =SEQUENCE(10) 生成 1~10 |
RANDARRAY |
随机数组 | =RANDARRAY(5,3) 5 行 3 列随机数 |
实战:动态筛选 Top 5
这个公式:先筛选销售额 > 10000 的记录,再按销售额降序排列。结果自动溢出到相邻单元格。
动态数组的 # 引用¶
引用动态数组的整个溢出范围,使用 # 后缀:
6.5 常用高级函数速查¶
日期与时间¶
| 函数 | 用途 |
|---|---|
EOMONTH |
当月最后一天 |
NETWORKDAYS |
工作日天数 |
DATEDIF |
日期差(年/月/日) |
WEEKNUM |
第几周 |
财务函数¶
| 函数 | 用途 |
|---|---|
PMT |
贷款月供 |
NPV |
净现值 |
IRR |
内部收益率 |
FV |
未来值 |
信息函数¶
| 函数 | 用途 |
|---|---|
ISNUMBER |
是否为数字 |
ISTEXT |
是否为文本 |
ISBLANK |
是否为空 |
ISERROR |
是否为错误值 |
CELL |
单元格信息 |
要点总结¶
- 理解 VLOOKUP 的局限,能写出正确的四参数形式
- 掌握 XLOOKUP 的基本和高级用法(多条件、反向、返回多列)
- 理解 INDEX-MATCH 的工作原理,能实现双向查找
- 了解动态数组函数(FILTER、SORT、UNIQUE)的用法
- 能根据场景选择合适的查找引用方案
课后练习¶
- 使用 XLOOKUP 实现:根据员工 ID 查找姓名、部门和薪资(一次返回三列)
- 使用 INDEX-MATCH 实现双向查找:根据产品和月份查找销售额
- 使用 FILTER + SORT 函数动态筛选并排序销售额 Top 10 的产品
下一章预告: 第 7 章:宏与 VBA 入门 —— 录制你的第一个宏,用 VBA 自动化重复工作。