这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

查找一个姓名对应的多个销售额,公式该怎么写?
今天跟大家分享一个工作中的经典问题:一对多查找 。今天跟大家分享的公式也是非常经典的公式 。
下图中 , 根据F3单元格的姓名,在B2:D14这个单元格区域中查找该姓名对应的所有销售额,并显示在G列对应的单元格中 。

这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

具体操作步骤如下:
1、选择G3单元格,在编辑栏中输入公式:=INDEX(D:D,SMALL(IF(C$3:C$14=F$3,ROW(C$3:C$14),ROWS(D:D)),ROW(C1)))&"",按组合键“CtrlShiftEnter”结束数组公式的输入,此时公式左右两边会自动加上大括号 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

2、将G3单元格的公式下拉填充至G6单元格即可 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

3、公式解析 。
(1)IF(C$3:C$14=F$3,ROW(C$3:C$14),ROWS(D:D)):
如果C$3:C$14这个单元格区域的内容与F$3这个单元格的相等,就放回C$3:C$14这个单元格区域所在的行,否则返回整个工作表的行数 。该公式返回的结果是:{1048576;4;1048576;1048576;7;1048576;1048576;10;1048576;1048576;13;1048576},我们可以看到,如果C列的姓名等于“刘子琪”的,那么公式返回的结果都是姓名所在行的行号,否则返回的是整个工作表的行数,整个工作表的行数是1048576行 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

(2)SMALL(IF(C$3:C$14=F$3,ROW(C$3:C$14),ROWS(D:D)),ROW(C1)):
【这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了】由第一步公式得出的结果,代如上面的公式:SMALL({1048576;4;1048576;1048576;7;1048576;1048576;10;1048576;1048576;13;1048576},ROW(C1)),SMALL函数的功能是:返回数据组中第K个最小值 , ROW(C1)是得到C1单元格所在的行号,为1 , 当公式下拉的时候,C2会依次变成C2、C3...,行号也会依次加1,所以该公式的意思是:在这个数据组{1048576;4;1048576;1048576;7;1048576;1048576;10;1048576;1048576;13;1048576}中,查找第1、2、3、4小的值 , 也就是4、7、10、13 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

(3)=INDEX(D:D,SMALL(IF(C$3:C$14=F$3,ROW(C$3:C$14),ROWS(D:D)),ROW(C1))):
INDEX函数的功能是:在给定的单元格区域中,返回特定行列交叉处单元格的值或引用 。由第(2)步可知,查找到的值为4、7、10、13 , 所以该公式相当于在D列销售额中,返回第7行、第7行、第10行、第13行的值,也就是2940、2680、2750、2685 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

(4)=INDEX(D:D,SMALL(IF(C$3:C$14=F$3,ROW(C$3:C$14),ROWS(D:D)),ROW(C1)))&"":
公式后面使用连接符(&)与空字符串("")连接 , 有2个作用:当返回的数据是数值型时,加上&"",变成了文本型数据;当返回是空单元格数据时,比如第(3)步,公式=INDEX(D:D,1048576),返回的结果是0,加上&"" , 就能把0屏蔽掉,显示为空 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

4、完整的动图演示如下 。
这条最经典的Excel一对多查找公式,我把每一步的解析都写出来了

好了,今天就跟大家分享到这里,如果文章对您有帮助,可以转发分享给更多的朋友,创作不易,希望多多支持,谢谢!

相关经验推荐