基础语法结构
INDEX函数的完整语法为:
INDEX(array, row_num, [column_num])
或 INDEX(array, row_num, [column_num], [area_num])
其中:
- array:要查找值的区域(1个或多个不连续区域)
- row_num:要返回的行号(从1开始计数)
- column_num:可选,要返回的列号
- area_num:可选,当array包含多个区域时指定第几个区域
种核心使用模式
模式1:单区域基本引用
从指定区域中,返回第row_num行、第column_num列的单元格值。
=INDEX(B2:D10, 3, 2)
→ 返回区域B2:D10中第3行第2列的值,即C4单元格
✅ 优点:绝对引用,不随公式复制而变动
⚠️ 注意:行号/列号必须≥1,否则返回#VALUE!错误
模式2:返回整行/整列
将row_num或column_num设为0,可返回整行或整列引用。
=INDEX(B2:D10, 0, 2)
→ 返回B2:D10的第2列,即C2:C10
=SUM(INDEX(B2:D10,0,2)) → 计算C列总和
关键技巧:INDEX返回的是“引用”而非“值”,因此可直接用于SUM、AVERAGE、COUNT等聚合函数,实现动态区域计算。
模式3:多区域引用(Area)
当需要跨多个不连续区域查找时,使用area_num参数。
=INDEX((B2:D5,G2:I5), 2, 3, 1)
→ 在第一个区域B2:D5中,返回第2行第3列,即D3
=INDEX((B2:D5,G2:I5), 1, 3, 2)
→ 在第二个区域G2:I5中,返回第1行第3列,即I2
✅ 应用场景:多月报表汇总、多工作表数据整合(无需VBA)
模式4:动态区域(配合OFFSET/INDEX)
将INDEX与OFFSET组合,实现动态数据范围引用,避免固定区域导致的遗漏。
=SUM(OFFSET(A1,0,0,COUNTA(A:A),1))
等价于:
=SUM(INDEX(A:A,1):INDEX(A:A,COUNTA(A:A)))
→ 自动计算A列非空单元格的总和
✅ 优势:避免使用易失性函数OFFSET(INDEX非易失),提升计算性能
INDEX vs VLOOKUP:为什么现代报表推荐INDEX?
| 特性 |
INDEX+MATCH |
VLOOKUP |
| 抗插入列干扰 |
✅ 是(MATCH定位列号) |
❌ 否(列偏移固定) |
| 支持左向查找 |
✅ 是 |
❌ 否(只能右向) |
| 多条件查询能力 |
✅ 强大(配合数组公式) |
❌ 弱(需辅助列) |
| 计算性能(大数据量) |
✅ 更优(非易失) |
⚠️ 较慢(易触发全表重算) |
| 返回整列/整行 |
✅ 是 |
❌ 否 |