数据排序必知函数:SORT & SORTBY

职场   2024-11-26 07:55   福建  

HI,大家好,我是星光


打个响指,提一个问题。有一份成绩表,如下图所示,A~D列是数据源。现在需要按照语文成绩降序排列,结果如E~G列所示——你会怎么编写函数公式呢?



如果是老版本的Excel,需要在E2单元格输入以下数组公式,复制填充到E2:G12单元格区域:


公式看不全可以左右拖动...▼

=INDEX(A:A,MOD(LARGE($B$2:$B$12/1%+ROW($2:$12),ROW(A1)),100))

公式的思路是先将语文成绩放大百倍/1%,然后加上对应的行号row(2:12),接着使用large函数从大到小取值,再用mod函数截取行号,最后用INDEX函数按行号取结果。


摊手,这解法不但弯而且妖娆,对函数新手朋友就很不友好。


而如果你的表格版本是Excel2021+,又或者WPS,用一个简短的SORT函数即可,毕竟版本就是生产力


E2单元格输入以下动态数组公式=SORT(A2:B12,2,-1)



1 丨 SORT函数


SORT函数可以按照数据源已有的数据进行排序,基本语法如下▼

=SORT(  数据源,  [排序索引],  [升序还是降序],  [是否按列排序])

除了第1参数数据源以外,其它参数都是可选的。其中第2参数指定排序依据字段的索引,如果省略则默认为1。第3参数指定排序的规则,1表示升序,-1表示降序,默认为升序。第4参数指定排序的方式,True表示按列排序,False表示按行排序,默认为False。


依然以上图所示成绩表为例,如果需要对人名升序排序,公式如下:

=SORT(A2:A12)

公式只使用了表示数据源的第1参数,其余参数全部省略,表示按数据源的第1列进行升序排序。



如果需要按语文成绩对A~C列降序排序,公式如下▼

=SORT(A2:C12,2,-1)

数据源是A2:C12区域。语文在该数据源中属于第2列,因此将第2参数设置为2。第3参数设置为-1,表示降序排序。


需要注意的是SORT函数的第2~3参数支持数组运算。

举个例子。假设需要按语文成绩降序排列;如果语文成绩相等,则再按数学成绩升序排序;如果数学成绩相等,则再按英语成绩降序排序……参考公式如下:

=SORT(A2:D12,{2,3,4},{-1,1,-1})

公式中第2参数指定的排序依据列为第{2,3,4}列,第3参数指定了各列分别对应的排序依据{-1,1,-1},也就是{降序,升序,降序}。




2 丨 SORTBY函数


打个响指,再提一个新的问题。

依然以成绩表为例,如果需要按总分进行排序(语文+数学+英语=总分),总分越高,越排在前面,又该怎么写函数公式呢?


F2单元格输入以下动态数组公式:

=SORTBY(  A2:D12,  B2:B12+C2:C12+D2:D12,  -1)

SORTBY是SORT的姊妹版。SORT函数是按数据源原有的数据进行排序,SORTBY则是支持自定义规则排序。语法格式如下:


=SORTBY(  数据源,  排序依据1,排序方式1,  排序依据2,排序方式2  ……)

以按总分排序的公式为例,数据源为A2:D12区域,排序依据列为三科成绩相加的总分列,排序方式是-1,也就是执行降序排列。


……

再举一个自定义排序的例子。

如下图所示,需要将A列班级,按一班、二班、三班……六班的序列排序。


参考式如下▼

=SORTBY(A2:D12,FIND(A2:A12,"一班二班三班四班五班六班"))

公式中,A2:D12是数据源,FIND函数查询A列班级在字符串"一班二班三班四班五班六班"中的索引位置,返回一组序列号,SORTBY第3参数省略,默认对第2参数的计算结果执行升序排序。



3 丨 计算排名


如果排序只是一个最终的结果,那么除了函数,也可以使用系统自带的排序功能;但对函数运算来说,很多时候排序可能只是一个过程……

我举两个关于排序他妹的排名的小例子。

3.1 加权排名

如下图所示,A:D列是奖牌榜数据,现在需要在E列作一个排名。如果金牌相等,再看银牌数,如果银牌相等,则看铜牌数……

为了演示目的,数据源做了排序处理...▼

参考解法如下:

=MATCH(  A2:A9,  SORTBY(A$2:A$9,B$2:B$9,-1,C$2:C$9,-1,D$2:D$9,-1),  0)

SORTBY函数按照金牌、银牌和铜牌先后优先级,对A列数据进行排序,得出一个降序排列的队伍列表。


SORTBY(A$2:A$9,B$2:B$9,-1,C$2:C$9,-1,D$2:D$9,-1)

然后再使用MATCH函数查询队伍名在该列表中的序列位置,也就是名次了。

3.2 分类中式排名

如下图所示,A~C列分别为班级、姓名和成绩,需要在班级内部进行中式排名。所谓中式排名,是指相同分数名次相同,且不占据多个名次,换而言之,也就是去除重复值后的排名。


D2单元格输入以下公式:

公式看不全可以左右拖动...▼
=MATCH(C2,SORT(UNIQUE(FILTER(C$2:C$12,A$2:A$12=A2)),1,-1),0)

公式先使用FILTER函数筛选出班级相同的成绩,然后使用UNIQUE函数删除重复项,接着使用SORT函数执行降序排序,最后使用MATCH函数返回当前成绩在排序后成绩中出现的序列,也就是名次了。


打个响指,没了。有啥问题照例可以在VIP会员微信群中提问交流,都是交了钱的,有问题就直说



需要系统学习Excel却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?


加入我的付费社群,学习+训练+答疑,与5000+在线会员一起,同微软最有价值专家MVP同行,全面精进Excel之道


🚂>>~

超低价Excel终身会员:一次付费

永久迭代学习,学习问题永久答疑


扩展阅读



 Excel.VBA常用代码合集
 WPS.JSA宏常用代码合集
• 从Excel出发带你轻松学会SQL

本文由公众号“Excel星球”首发。

点击阅读原文系统学习Excel!

Excel星球
微软全球最有价值专家(Excel MVP),上千篇原创图文和视频教程随学随用,随用随查,建议常用Excel的职场人关注。
 最新文章