从数据区域中提取满足多条件的值
如下图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及以上版本。