人气 3680

[Excel技巧] Office里的查找替换——函数一对多查找 [复制链接]

多看少说没错- 2017-1-19 16:26:17
摘自:小妖-Office中国昨天发了多对一查找的技巧,今天来说说一对多查找:所谓一对多查找,就是满足一个条件的有N个结果……先看下面的效果图,从符合的条件中找出多个符合的结果。效果图:

1484815123110591.jpg

1484815123110591.jpg

函数一对多查找动态图:

1484815123404498.gif

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是首选。这公式虽然复杂且运行速度慢,但他却是非常经典的一个思路,也不知道是哪位高人想出来的,向他致敬!
您需要登录后才可以回帖 登录 | 立即注册

QQ|手机版|精益人 ( 沪ICP备19004111号-1 )|网站地图

GMT+8, 2024-12-22 18:15 , Processed in 0.231112 second(s), 23 queries .

Powered by Lean.ren X3.5 Licensed  © 2001-2030 LEAN.REN