excel如何一个条件匹配多个数据?

excel如何一个条件匹配多个数据?

可以使用INDEX+SMALL+IF+COLUMN组成的数组公式实现,外面再套一个IFERROR函数屏蔽错误值。

考虑到可能会有新手看见这个答案,我写得详细一点。

1、实现效果

2、示例公式

=IFERROR(INDEX($B$2:$B$16,SMALL(IF($D2=$A$2:$A$16,ROW($A$2:$A$16)-1),COLUMN(A:A))),"")

*输入到E2单元格,数组公式需要三键结束输入(CTRL+SHIFT+ENTER),输入完毕后再填充到E2:G7区域。

*公式中有相对、混合和绝对引用,输入公式时要注意。

3、公式分析

本示例使用的就是可以“根据单条件或多条件查询多值”的固定套路(INDEX+SMALL+IF+ROW或者INDEX+SMALL+IF+COLUMN),俗称“万金油”。

下面以从E2单元格“曹操的第1个项目”开始进行分步分析:

①判断条件

根据D2的条件“曹操”,生成条件数组,是“曹操”则返回TRUE,不是“曹操”则返回FALSE。

公式:

=$D2=$A$2:$A$16

*这个数组公式有15个结果。

*选中E2:E16区域,输入公式并三键结束输入(CTRL+SHIFT+ENTER),该数组公式的15个结果会依次填充到这15个单元格内。

*为了数据更清晰,图中手动标记了颜色。

只有第2、12、15行显示为TRUE。

②生成序号

根据条件数组,生成“曹操”对应的行号,是“曹操”则返回当前行号,不是“曹操”则返回FALSE。

公式:

=IF($D2=$A$2:$A$16,ROW($A$2:$A$16))

*选中E2:E16区域,输入公式并三键结束输入(CTRL+SHIFT+ENTER),该数组公式的15个结果会依次填充到这15个单元格内。

重点:我们得到了“曹操”对应的行号,但实际上我们需要的是“曹操”在目标区域A2:A16内对应的序号,因为目标区域是A2:A16,既第1个元素对应的行号是2、第2个元素对应的行号是3。。。第15个元素对应的行号是16,所以将“行号-1”就得到了对应的序号。

公式:

=IF($D2=$A$2:$A$16,ROW($A$2:$A$16)-1)

*选中E2:E16区域,输入公式并三键结束输入(CTRL+SHIFT+ENTER),该数组公式的15个结果会依次填充到这15个单元格内。

在目标区域A2:A16中,“曹操”对应的序号为1、11、14。

③输出序号

利用SMALL和COLUMN函数依次输出对应的序号

=SMALL(IF($D2=$A$2:$A$16,ROW($A$2:$A$16)-1),COLUMN(A:A))

*数组公式,需要三键结束输入(CTRL+SHIFT+ENTER)。

输入完毕后,将公式向右填充到F2:G2区域。

在E2单元格引用的COLUMN(A:A)实际值为1,填充到F2、G2时变为COLUMN(B:B)、COLUMN(C:C),实际值分别为2、3。

再配合SMALL函数,E2、F2、G2分别返回了目标数组中第1、第2、第3个最小值1、11、14。

④输出结果

利用INDEX函数,输出目标序号所对应的内容。

=INDEX($B$2:$B$16,SMALL(IF($D2=$A$2:$A$16,ROW($A$2:$A$16)-1),COLUMN(A:A)))

*输入到E2单元格,三键结束输入(CTRL+SHIFT+ENTER),然后再填充到E2:G2区域。

在上一步骤中,E2、F2、G2输出的结果分别是1、11、14,这一步分别返回了目标区域(B2:B16)中第1、11、14个元素“项目1”、“项目11”和“项目14”。

⑤屏蔽错误

将上一步的公式填充到目标区域E2:G7。

右下角有三个位置没有匹配到对应的值,返回了错误值,这个错误值可以通过在外面套IFERROR函数来屏蔽。

=IFERROR(INDEX($B$2:$B$16,SMALL(IF($D2=$A$2:$A$16,ROW($A$2:$A$16)-1),COLUMN(A:A))),"")

*输入到E2单元格,三键结束输入(CTRL+SHIFT+ENTER),然后再填充到E2:G7区域。

目标效果达成。

4、特别说明

①以上公式全部是数组公式,需要三键结束输入(CTRL+SHIFT+ENTER)。

②公式中有相对、混合和绝对引用,输入公式时要注意。

③因为同一个条件的不同数据是向右依次输出的,所以使用的是COLUMN(A:A),如果数据需要向下依次输出,则需要把COLUMN(A:A)换成ROW(1:1)。

④熟悉这个套路以后,还可以实现多条件查询多值功能。

有问题请留言。