如何提取源数据中第n大的数字?函数表示这不是事儿!
点击上方
蓝色
文字 关注我们吧!
送人玫瑰,手有余香,请将文章分享给更多朋友
动手操作是熟练掌握EXCEL的最快捷途径!
小伙伴们,我在帖子总结篇--FREQUENCY函数使用终极帖中介绍过FREQUENCY这个函数的一种应用,即查找一组数值型数据中最大和第二大的数据。
那么,问题来了。是否有一个通用公式,来求一组数据中的第三大、第四大直到第n大的数据呢?
想到这个问题后我立即行动,查阅相关的书籍资料后,现在分享给大家。
FREQUENCY函数法
我们来查找下表中绝对值第三大的非整数。
在单元格E2中输入公式“=LOOKUP(0,0/FREQUENCY(1-LARGE((IF(MOD(E$3:E$13,1),E$3:E$13))^2,2),0-(IF(MOD(E$3:E$13,1),E$3:E$13))^2),E$3:E$13)”,三键回车即可。
思路:
因为是要求非整数,因此IF(MOD(E$3:E$13,1),E$3:E$13)这部分做了数据处理,其返回值均为非整数。
(IF(MOD(E$3:E$13,1),E$3:E$13))^2部分,是处理这类情况的一种方式。同样也可以使用ABS函数。
0-(IF(MOD(E$3:E$13,1),E$3:E$13))^2)部分,将正值变为负值
1-LARGE((IF(MOD(E$3:E$13,1),E$3:E$13))^2,2)部分是本例的核心。其作用是:将(IF(MOD(E$3:E$13,1),E$3:E$13))^2)中第二大的那个数变成负值。1减去它后,其值介于第二小和第三小的数值之间。
接下来在利用FREQUENCY函数计频,在0-(IF(MOD(E$3:E$13,1),E$3:E$13))^2)中第三小所对应的位置上计频1
利用LOOKUP函数最后可以求得对应的第三大的非整数了。
朋友们这里可以发现一个规律,求第三大,LARGE函数的第二个参数就是2;依此类推,求第n大,LARGE函数的第二个参数就是n-1了。
在单元格F2中输入公式“=LOOKUP(1,0/(ABS(F$3:F$13)=LARGE(IF(MOD(F$3:F$13,1)<>0,ABS(F$3:F$13)),3)),F$3:F$13)”,三键回车即可。
思路:
LARGE(IF(MOD(F$3:F$13,1)<>0,ABS(F$3:F$13)),3)部分,同样是对数据进行处理,返回非整数。
ABS(F$3:F$13)=LARGE(IF(MOD(F$3:F$13,1)<>0,ABS(F$3:F$13)),3)部分,做一个逻辑判断
LOOKUP函数返回最后一个符合条件的数据
这个思路大道至简!
在单元格G2中输入公式“=INDEX(G$3:G$13,MATCH(LARGE(IF(MOD(ABS(G$3:G$13),1)>0,ABS(G3:G13)),3),ABS(G$3:G$13),))”,三键回车即可。
思路:
LARGE(IF(MOD(ABS(G$3:G$13),1)>0,ABS(G3:G13)),3)部分,数据处理,并提取第三大的数值
MATCH部分找出第三大在ABS(G$3:G$13)中的位置
INDEX函数返回正确的数据。
同样,这个思路也是比较简单好理解的。
在单元格H2中输入公式“=INDIRECT("H"&LOOKUP(1,0/(ABS(IF(INT(H$3:H$13)=H$3:H$13,0,H$3:H$13))=LARGE(ABS(IF(INT(H$3:H$13)=H$3:H$13,0,H$3:H$13)),3)),ROW(H$3:H$13)))”,三键回车。
思路:
IF(INT(H$3:H$13)=H$3:H$13,0,H$3:H$13)部分,同样是做数据处理。这里利用INT函数向下取整,如果是整数,取整后的数据和源数据是一致的。这个是这个解法的亮点。
后面的思路和上面的大同小异,不再详细介绍了。
INDIRECT部分,利用INDIRECT函数返回对应位置的数据。
-END-
长按下方二维码关注EXCEL应用之家
面对EXCEL操作问题时不再迷茫无助
戳原文,更有料!免费模板文档!