如何提取源数据中第n大的数字?函数表示这不是事儿!

点击上方

蓝色

文字  关注我们吧!

送人玫瑰,手有余香,请将文章分享给更多朋友

动手操作是熟练掌握EXCEL的最快捷途径!

小伙伴们,我在帖子总结篇--FREQUENCY函数使用终极帖中介绍过FREQUENCY这个函数的一种应用,即查找一组数值型数据中最大和第二大的数据。

那么,问题来了。是否有一个通用公式,来求一组数据中的第三大、第四大直到第n大的数据呢?

想到这个问题后我立即行动,查阅相关的书籍资料后,现在分享给大家。

01

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了。

02

在单元格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函数返回最后一个符合条件的数据

这个思路大道至简!

03

在单元格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函数返回正确的数据。

同样,这个思路也是比较简单好理解的。

04

在单元格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操作问题时不再迷茫无助

戳原文,更有料!免费模板文档!

推荐阅读
(0)

相关推荐