=INDEX(A2:C6,3,2) 返回区域 A2:C6 中第三行第二列的值。位置从区域左上角的单元格开始算,所以 A2:C6 的第 3 行是工作表的第 4 行。改一下 3 或 2,看看结果怎么移动。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Row | Column | Result | |
| 2 | Apple | Fruit | $1.20 | 3 | 2 | Vegetable | |
| 3 | Pear | Fruit | $1.50 | ||||
| 4 | Carrot | Vegetable | $0.80 | ||||
| 5 | Bread | Bakery | $2.40 | ||||
| 6 | Milk | Dairy | $1.10 |
E2 中是行号,F2 中是列号。第 3 行是 Carrot,第 2 列是 Category,所以 G2 显示 Vegetable。把 F2 设为 1 会得到产品名称;把 E2 设为 6 会看到 #REF!:A2:C6 只有五行。
INDEX 语法
=INDEX(array, row_num, [column_num])
array:要从中读取的区域(或数组)。row_num:取第几行,从 1 开始。用 0 表示所有行。column_num:取第几列,从 1 开始。区域只有一列或一行时可以省略;用 0 表示所有列。
在单列区域上,一个数字就够了:=INDEX(A2:A6,4) 是第四项 Bread。还有第二种形式 =INDEX((A2:C3,A5:C6),1,1,2),可以从多个区域中的某一个里取值;这种写法很少用到。
取第 n 项或最后一项
对单列使用 INDEX,回答的是“第 n 项是什么”。再搭配统计有内容单元格个数的 COUNTA,就能返回一个不断增长的列表中的最后一项。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Item number | 2 | |
| 2 | Apple | Nth item | Pear | |
| 3 | Pear | Last item | Milk | |
| 4 | Carrot | |||
| 5 | Bread | |||
| 6 | Milk |
D1 是 2,所以 D2 返回 Pear。COUNTA 数出 5 个产品,所以 D3 返回第五项 Milk。删掉 Milk,D3 就返回 Bread。在实际文件中,让两个公式都指向更长的区域,例如 A2:A1000,这样新加的行也会被包括进来;只有当这一列中间没有空单元格时,COUNTA 才能这样用。
用 0 返回整行或整列
行号为 0 表示“所有行”,所以 INDEX(B2:D5,0,2) 就是整个第二列。放进 SUM、AVERAGE 或 MAX 里,就能对按序号选出的一列求合计。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Jan | Feb | Mar | Month number | Total | |
| 2 | North | 4,200 | 3,900 | 4,800 | 2 | 15,200 | |
| 3 | South | 3,100 | 3,600 | 3,300 | |||
| 4 | East | 5,200 | 4,700 | 5,600 | |||
| 5 | West | 2,800 | 3,000 | 3,400 |
第 2 个月是 Feb,G2 把 C2:C5 加起来:15,200。把 F2 改成 3 就是 3 月。整行也是同样的用法:=SUM(INDEX(B2:D5,3,0)) 求的是 East 的合计。在 Excel 2021 和 Microsoft 365 中,单独使用 =INDEX(B2:D5,0,2) 会把这四个值向下溢出到工作表中。如果想按标题而不是序号来选列,就把 F2 换成一个 MATCH,这就是 INDEX 和 MATCH 的用法。
对数组或溢出结果使用 INDEX
INDEX 不仅能读取工作表上的区域,也能读取公式返回的数组。这样不用先把列表写出来,就能从排序、筛选或去重后的列表中取出某一项。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Most expensive | Bread | |
| 2 | Apple | Fruit | $1.20 | Second | Pear | |
| 3 | Pear | Fruit | $1.50 | Cheapest | Carrot | |
| 4 | Carrot | Vegetable | $0.80 | |||
| 5 | Bread | Bakery | $2.40 | |||
| 6 | Milk | Dairy | $1.10 |
SORTBY 返回按价格排好序的五个产品,INDEX 取出第 1 项(Bread)、第 2 项(Pear),或者从升序排序结果中取出第 1 项(Carrot)。把 Milk 的价格改成 3,它就变成最贵的产品。如果工作表上已经有一个溢出列表,比如在 H2 中,那么在 Excel 2021 和 Microsoft 365 中可以写 =INDEX(H2#,2) 来取它的第二项。
练习:求所选月份的合计
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Jan | Feb | Mar | Month number | Total | |
| 2 | North | 4,200 | 3,900 | 4,800 | 1 | ||
| 3 | South | 3,100 | 3,600 | 3,300 | |||
| 4 | East | 5,200 | 4,700 | 5,600 | |||
| 5 | West | 2,800 | 3,000 | 3,400 |
轮到你了: 在 G2 中用 INDEX 返回 F2 中序号所对应月份的合计(1 = Jan,2 = Feb,3 = Mar)。
常见问题
Excel 中的 INDEX 函数是做什么的?
它返回区域中指定位置上的值:=INDEX(A2:C6,3,2) 返回 A2:C6 中第三行第二列的值。位置从区域左上角的单元格开始算,而不是从工作表的第 1 行开始算。
怎样用 INDEX 取一列中的最后一个值?
把有内容的单元格个数作为行号:=INDEX(B2:B100,COUNTA(B2:B100)) 返回中间没有空格的一列中的最后一个值。如果中间有空单元格,=LOOKUP(2,1/(B2:B100<>""),B2:B100) 返回最后一个非空值。
INDEX 为什么返回 #REF!?
行号或列号超出了区域的范围。=INDEX(A2:A6,7) 要取五个单元格区域中的第七项,所以返回 #REF!。
怎样用 INDEX 返回一整列?
把行号设为 0:=INDEX(B2:D5,0,2) 返回第二列的全部值。用函数包住它就能求合计,例如 =SUM(INDEX(B2:D5,0,2));在 Excel 2021 和 Microsoft 365 中也可以让它直接溢出。