从数据区域中提取满足多条件的值

如下图1所示,单元格区域A8:D18中是销售数据,如何使用公式提取张三在2017年5月1日至2017年12月1日之间的销售数据?

图1

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


公式

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

=IFERROR(INDEX(A$9:A$18,SMALL(IF($A$9:$A$18>=$B$3,IF($A$9:$A$18<=$C$3,IF($C$9:$C$18=$D$3,ROW($A$9:$A$18)-ROW($A$9)+1))),ROWS(F$9:F9))),"")

如图2所示。

图2

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

公式解析

公式中的:

IF($A$9:$A$18>=$B$3,IF($A$9:$A$18<=$C$3,IF($C$9:$C$18=$D$3,

将单元格区域A9:A18中的数据与条件区域中的单元格B3和C3中的数据相比较,如果条件都满足,则将单元格区域C9:C18中的数据与单元格D3中的数据比较。

公式中的:

ROW($A$9:$A$18)-ROW($A$9)+1

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

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

公式中的:

ROWS(F$9:F9)

根据当前单元格所在位置生成一个数字,在F9中的数字为1,在G9中也为1,在F10中为2,将此数字作为SMALL函数的第2个参数。在刚生成的数组中取值。如果在单元格F9中,则得到的值为4,即数据区域中的第4行,并将此作为INDEX函数的行参数。

在单元格F9中的公式演化为:

=IFERROR(INDEX(A$9:A$18,4),"")

即获取到单元格A12中的值。

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

小结

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

  • 多个IF函数用于多个条件判断并获取数组。

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

(0)

相关推荐