摘自:小妖-Office中国昨天发了多对一查找的技巧,今天来说说一对多查找:所谓一对多查找,就是满足一个条件的有N个结果……先看下面的效果图,从符合的条件中找出多个符合的结果。效果图:
1484815123110591.jpg
函数一对多查找动态图:
1484815123404498.gif
函数一对多查找函数公式:=INDEX(B:B,SMALL(IF(A$3:A$12=D$3,ROW($3:$12),13),ROW(A1)))&""这是一个数组公式,需要同时按下【Ctrl】+【Shift】+【Enter】三个键完成才行,而且运行速度也相对慢,所以实在不提倡在现实中使用。
函数分析:公式中A$3:A$12=D$3部分建构了一个内存数组,结果都为逻辑值,当A5:A14中有与D5相等的,也就是满足条件的,返回逻辑真TRUE,否则返回逻辑假FALSE。
公式中IF(A$3:A$12=D$3,ROW($3:$12),13)部分建构的还是个内存数组(废话),只不过就是把前面的逻辑值换成了数值,逻辑真对应的是3到12的序列数,逻辑假对应的是13,为什么是13?话说这个13弄晕一堆人啊,被晕的原因主要是想复杂了,其实他就是个比12大的数,也不一定非要是13,多少都行,只要不超过2的20次方(Excel最大行数)。
公式中的SMALL(IF(A$3:A$12=D$3,ROW($3:$12),13),ROW(A1))部分,就是把If折腾出现的那些数从小大到排一下,这样,不符合条件的就被挤到了最后。
公式中的INDEX(B:B,SMALL(IF(A$3:A$12=D$3,ROW($3:$12),13),ROW(A1)))部分,不用多说了,就是把B列对应的符合条件的行数的单元格一个一个提出来呗。这里不一定非要用Index,Indirect和Offset都可以,只不过本身函数集团那BT的省字符的原则,Index是首选。这公式虽然复杂且运行速度慢,但他却是非常经典的一个思路,也不知道是哪位高人想出来的,向他致敬! |