筛选出出现次数最多的姓名

大家新年好,今天要分享的内容是筛选出出现次数最多的姓名。先来看下数据源和筛选后的效果。如下图所示,A列是一些姓名,我这里就用ABCD代替了,有些姓名是出现多次的。现在的要求是筛选出出现次数最多的姓名,如果有多个出现次数最多的,那么都要筛选出来。比如现在A和C出现的次数最多,并且都是5次,所以要把A和C都筛选出来,结果如C列和E列所示。
第一种方法:在C2单元格输入公式=IFERROR(INDEX(A:A,SMALL(MODE.MULT(MATCH(A$2:A$15,A$2:A$15,)),ROW(A1))+1),""),下拉完成。
首先用match查找所有姓名在姓名区域的位置,也就是MATCH(A$2:A$15,A$2:A$15,)这部分,返回的结果如下图B列所示。由于match只返回查找到第一个值的位置,所以相同的姓名返回的结果是一样的,比如A都返回1,C都返回2。
接下来,用mode.mult返回出现次数最多的数字,也就是MODE.MULT(MATCH(A$2:A$15,A$2:A$15,))这部分,由于match返回的结果中,1和2出现的次数最多,都是5次,所以mode.mult返回的结果为{1;2},如下图B列所示。得到的结果有2个值,说明有2个姓名。同时这2个值又是姓名对应的位置,所以接下来要分别提取出位置,然后根据位置返回对应的姓名。
=SMALL(MODE.MULT(MATCH(A$2:A$15,A$2:A$15,)),ROW(A1))这部分就是用small提取上一步的第1个最小值1,公式下拉提取第2个最小值2,如下图B列所示。
=INDEX(A$2:A$15,SMALL(MODE.MULT(MATCH(A$2:A$15,A$2:A$15,)),ROW(A1)))这部分就是用index返回A$2:A$15这个区域中对应的位置的内容,如果要引用A:A列,就用small返回的结果加上1,因为有个表头。公式下拉太多会出错,如下图B列所示,所以最后用iferror处理下错误值。
第二种方法:在E2单元格输入公式=INDEX(A:A,SMALL(IF(COUNTIF(OFFSET(A$2,,,ROW($2:$15)-1),A$2:A$15)=MAX(COUNTIF(A$2:A$15,A$2:A$15)),ROW($2:$15),4^8),ROW(A1)))&"",按ctrl+shift+enter三键结束,向下填充。
这个公式用的是offset的多维引用加万金油套路。=COUNTIF(OFFSET(A$2,,,ROW($2:$15)-1),A$2:A$15)这部分返回的结果如下图B列所示,是一个内存数组,就相当于辅助列公式=COUNTIF(A$2:A2,A2)下拉填充的效果。这样得到的结果就是每个姓名出现了几次,出现了1次就是1,2次就是2。从下图可以看到出现次数最多的是5,分别是A和C。
=MAX(COUNTIF(A$2:A$15,A$2:A$15))这部分是求所有姓名中出现的最大次数,结果肯定是5。然后用这个最大次数和上图countif返回的内存数组比较是否相等,相等的返回对应的行号,否则返回4的8次方;接下来用small提取出每个行号,再用index返回对应的姓名,就是万金油的套路。
文件还有另外的2种方法,大家可以下载查看。同时你也可以想想其他的方法,欢迎留言写下你的答案,让我们一起学习。
文件链接:
https://pan.baidu.com/s/1QYdCz6D3_y6TbXhK2DmwgQ
提取码:pxzo
你是否看见别人准时下班,心里很羡慕,但依然得埋头继续加班做表格;你是否常常在群里求助别人帮你解决问题,但又看不懂公式;你是否想要免费学习函数却又找不到系统的教程。扫码关注,系统讲解excel常用函数,一条公式让你从重复性工作中解脱出来。也希望你能分享转发给你的朋友。
关注解锁更多函数的用法
大家如果有问题可以加微信群提问,也可以加我的微信15003417692提问,让我们共同学习excel。我也会筛选出有代表性的或者大家经常遇到的问题在公众号中解释说明。同时也要感谢那些转发和打赏的小伙伴们,这对我很有帮助。
写留言
(0)

相关推荐