单词index的意思是”指标;索引;指数“。
函数INDEX的功能是,在单元格区域或数组中,返回指定的行和列交叉处的单元格引用或值。
语法
INDEX(array,row_num,column_num)
array:数组或单元格区域;
row_num:行号;
column_num:列号。
结果会返回数组array中第row_num行、第column_num列的数据。
使用INDEX查找引用数据,关键是确定数据所在的行号和列号。
示例1、单列数据转换为多列数据
如下图,A1:A60是单列的数据,需要将其转换为5列,A1:A5摆放在结果的第一行,A6:A10摆放在结果的第二行……
本例为将单列数据转化为多列的形式,实际上是改变数据布局。为了改变数据布局,可以在新布局中的每个位置上,记录好该位置对应的原始数据的位置,再用INDEX引用即可。
上图中,C2:G13区域为新数据布局,每个位置的数字就是该位置需要引用的原始数据A列的行号,再在I2单元格输入如下公式,向右向下填充即可
=INDEX($A:$A,C2,1)
示例2、INDEX和MATCH相结合来查找引用数据
单列数据查询
如下图,A:G列是成绩数据表,第一行为标题行,班级没有在最左侧。要查询I列的班级对应的数学成绩。
本例不能直接使用VLOOKUP,因为VLOOKUP只能返回查找值所在列的右侧列的数据,而本例的数学在班级的左侧。此时,可以联合使用INDEX和MATCH来实现任意方向的查找。
在J2单元格输入公式,并向下填充
=INDEX(B:B,MATCH(I2,D:D,0),1)
公式解析
MATCH(I2,D:D,0)可以确定查询的班级在数据表D列中的位置,这就是需要的行号。再用INDEX返回B列中这一行、第一列的值。

二维表查询
如下图,A:G列为成绩数据表,第一行为标题行。需要查找I列班级对应的数学、生物、英语分数。
本例可以使用VLOOKUP和MATCH来完成,也可以使用INDEX配合两个MATCH来查找。需要引用的数据就是成绩表中,班级所在行和科目所在列交叉处的值,而行号和列号都可以用MATCH来确定。
在J2单元格输入公式,并向右向下填充,注意单元格的绝对引用和相对引用。
=INDEX($A$1:$G$9,MATCH($I2,$A$1:$A$9,0),MATCH(J$1,$A$1:$G$1,0))
示例3、数据区域旋转–以向右旋转90度为例
如下图,A1:D5区域是一个5×4的区域,向右旋转90度后,将变为右边4×5的区域,数据位置变化如图。
结果中的第1行数据,来源于数据源的第1列。其中:
第1列数据17,对应最后1行(第5行),第1列;
第2列数据13,对应倒数第2行,第1列;
第3列数据9,对应倒数第3行,第1列;
。。。
结果中的第2行数据,来源于数据源的第2列。其中:
第1列数据18,对应最后1行(第5行),第2列;
第2列数据14,对应倒数第2行,第2列;
第3列数据10,对应倒数第3行,第2列;
。。。
通过上述分析,在引用源数据过程中,随着公式向下填充,行号不变,列号要增大;随着公式向右填充,行号要减小,列号不变。因此,使用INDEX的公式为
=INDEX($A$1:$D$5,ROWS($A$1:$D$5)-COLUMN(A$1)+1,ROW($A1))
公式解析:
行索引号ROWS($A$1:$D$5)-COLUMN(A$1)+1:因为向右填充时,行号要从最后1行到第1行,依次递减,而向下填充公式时,行号不变。因此,用ROWS($A$1:$D$5)得到区域的总行数,再减COLUMN(A$1)加1,COLUMN(A$1)在向下填充公式时不变,向右填充公式时,会从1依次增大。
列索引号ROW($A1):向下填充公式时,会从1依次增大,向右填充公式时,值不变。