获取指定班级的学生姓名

如下图1所示,在单元格D2中指定班级名称,要获取数据区域A1:B10中该班级学生姓名,如何编写公式?

图1

先不看答案,自已动手试一试。


公式

在单元格D5中的数组公式:

=IFERROR(INDEX($A$2:$A$10,SMALL(IF($B$2:$B$10=D$2,ROW($A$2:$A$10)-ROW(A$2)+1),ROWS(G$4:G4))),"")

如图2所示。

图2

向下拖至单元格中没有数据为止。

公式解析

公式中的:

IF($B$2:$B$10=D$2

将单元格区域B2:B10中的数据与单元格D2中的数据相比较,生成数组{FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE}。

公式中的:

ROW($A$2:$A$10)-ROW(A$2)+1

生成数组{1;2;3;4;5;6;7;8;9},作为IF函数的第2个参数。

这样,上述两个公式联合生成数组{FALSE;2;FALSE;4;FALSE;FALSE;7;FALSE;9},作为SMALL函数的第1个参数。

公式中的:

ROWS(G$4:G4)

根据当前单元格所在位置生成一个数字,在G4中的数字为1,在G5中为2,将此数字作为SMALL函数的第2个参数。

SMALL函数产生的结果数值INDEX函数的行参数,在单元格区域A2:A10中获取相应的值。

将单元格D5中的公式向下拖动时,相对引用单元格自动调整,并获取相应单元格的值。

小结

  • SMALL函数忽略参数中的任何非数字的数据。

  • IF函数根据条件判断一次性生成相应的数组。

  • 公式适用于Excel2007及以上版本。

(0)

相关推荐