大家好,我是在研究成绩排序的小爽~
我有个朋友,是一位老师,现在他需要对学生的成绩进行排序,规则是:
先看总分成绩,总分相同的情况下,优先看数学成绩,数学成绩相同的情况下,优先看语文成绩,语文成绩相同的情况,看英语成绩。最终进行排序。
在 Excel 中,就有一个操作简单的自定义排序功能,可以完成上述要求。
首先我们在 E2 单元格中输入公式进行求和:
=SUM($B2:$D2)
选中 A1:E10 表格数据区域,在【开始】选项卡下,单击【排序和筛选】,选择【自定义排序】。
依次添加对应的条件,总分-单元格值-降序,选择确定,就可以达到我们想要的要求。
此时排序就完成啦~
自定义排序虽然简单,但是每一次修改对应数据后,不能实时排序。
他想要的是自动排序成绩。
那有没有一个排序函数,直接就可以搞定呢?
Office365 还真的出了两个排序函数Sort和Sortby。
Sort 函数可以对区域中,指定索引按照升序或者降序排序。
=SORT(array,[sort_index],[sort_order],[by_col])=SORT(数组区域,[排序索引,默认为1],[排序方式,默认为升序],[按行还是按列排序])▲左右滑动查看
比如我们想要总分按照从大到小的方式进行排序。
在 G2 单元格中输入公式:
=SORT(A2:E10,5,-1,FALSE)
数据区域:A2:E10;
总分相对区域于数据区域在第 5 列;
排序方式:-1 代表降序;
按行排序为 False。
不过,Sort函数只能针对一个索引值进行指定排序,如果想要对多个列指定排序,我们还需要知道另外一个函数 ——Sortby函数。
=SORTBY(array,by_array1,[sort_order1],[by_array2、sort_order2],)=SORTBY数组区域,列1,[排序方式1],[列2、排序方式2],)▲左右滑动查看
本例,我们就可以使用 Sortby 函数。
为了让表格能够自动扩展区域,我们先将数据区域转化为超级表。
选中表格区域,按住快捷键【Ctrl+T】,将表格转换为超级表。
G2 单元格中输入公式:
=SORTBY(表2,
表2[总分]-1,
表2[数学],-1,
表2[语文],-1,
表2[英语],-1)
PS.-1 为降序排序,表 2 为该表的名称。
一个简单的函数公式就搞定啦!
因为我们的表格是超级表,所以当我们更新记录时,对应的排序表也会实时更新。
Sortby 函数好用是好用,但是我用的是 WPS 怎么办。
不用担心,WPS 现在也更新了 Sortby 函数。
哇呜,太棒啦~
不过,WPS 和 Office365,在使用 Sortby函数的区别在于:
Office365 使用的是动态数组,按住【Enter】键就可以自动拓展,而 WPS 则需要选中区域后,在编辑状态,按住数组三键【Ctrl+Shift+Enter】进行数组运算。
公式如下:
=SORTBY(A2:E10,E2:E10,-1,C2:C10,-1,B2:B10,-1,D2:D10,-1)
WPS 操作,动图如下:
如果你不是 Office365 用户,但是 Excel 中有 PowerQuery,PQ 中也有一个排序函数,那就是Table.Sort函数。
选中数据区域,点击【数据】选项卡-【来自表格 / 区域】(有些版本不叫这个名字),将数据导入到 PQ 编辑器中。
选中总分列,在【主页】选项卡,选择降序,依次选中数学列,语文列,英语列选择降序。
这里,我们可以看到,所有的排序操作,对应的是一个 Table.Sort 函数。
我们来简单看看 Table.Sort 函数的对应参数。
排序方式:
升序:Order.Ascending/ 0;
降序:Order.Descending/ 1。
Table.Sorttableastable,comparisonCriteriaasany)astableTable.Sort表,{{字段1,0/1},{字段2,0/1},{字段3,0/1}……}▲左右滑动查看
所以,案例中,对应的 m 函数公式为:
= Table.Sort(更改的类型,{{"总分", Order.Descending}, {"数学", Order.Descending}, {"语文", Order.Descending},{"英语", Order.Descending} })
这个 m函数公式跟前面的 Sortby 函数公式是不是很像呢~
都是表,然后字段的排序。
=SORTBY表2表2[总分],-1表2[数学],-1表2[语文],-1表2[英语],-1)
利用 PQ 法完成的排序,也是可以实时更新的。
本文介绍了三种自定义排序做法:
❶自定义排序操作
❷ Sortby 函数
Office365
WPS 需要使用数组三键
❸Table.Sort 函数
PowerQuery 中的排序函数
参数跟 Sortby 函数很像
在工作中,排序功能特别常用。
但是美中不足的是,它不能实时更新排序。我们以前要达到实时更新排序功能,有时还需要使用 VBA 工作表事件。
开心的是,Office 在前年 8 月更新了 Sortby 函数,WPS 在去年 10 月更新 Sortby 函数。
拆分功能也非常常见,分列功能也是存在不能实时更新的问题,所以 Office 和 WPS,什么时候可以更新 Split 函数呢?大家觉得后面 Split 函数会有嘛~