Menu

Excel SORT 和 SORTBY 函数:用公式排序

=SORT(A2:C7,3,-1) 返回按第三列从大到小排序的 A2:C7 表格,数据变化时会自动重新排序。SORTBY 可以按任意区域排序,包括多列排序和自定义顺序。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=SORT(A2:C7,3,-1) 返回按第三列(销售额)从大到小排序的 A2:C7 表格。原表格保持不变;排好序的副本从公式所在单元格溢出,数字一变就会自动重新排序。把 C7 改成 300,Finn 就会排到最前面。

销售额从高到低
E2
ABCDEFG
1NameRegionSalesNameRegionSales
2AnnNorth120CaraNorth200
3BenSouth80DanEast150
4CaraNorth200AnnNorth120
5DanEast150EveSouth95
6EveSouth95BenSouth80
7FinnNorth60FinnNorth60
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

SORT 的语法

=SORT(array, [sort_index], [sort_order], [by_col])
  • array 是要排序并返回的区域。
  • sort_index 是 array 中作为排序依据的列号,默认为 1。
  • sort_order 为 1 表示升序(默认),为 -1 表示降序。
  • by_col 为 FALSE(默认)时按行排序,为 TRUE 时按列从左到右排序。

SORT 和 SORTBY 需要 Excel 2021、Excel 2024 或 Microsoft 365;更早的版本显示 #NAME?。Google 表格也有这两个函数,不过它的 SORT 要成对地填写列号和 TRUE 或 FALSE。

升序排列时,数字在前,然后是按 A 到 Z 排列的文本,最后是 FALSE 和 TRUE。比较文本时不区分大小写。array 中的空单元格在结果中显示为 0。

Excel 中怎样按字母排序

要就地重新排列一个列表,点击其中任意一个单元格,选择“数据 > 升序”(或“降序”)。如果列表旁边还有相邻的列,Excel 会对整张表排序,让每一行的数据保持在一起。需要按多列排序或使用自定义序列时,用“数据 > 排序”。

如果想保留原来的顺序,再得到一份会自动更新的按字母排序的副本,就使用不带其他参数的 SORT:

姓名按 A 到 Z 排序
C2
ABC
1NameA to Z
2MiaAnn
3BenBen
4ZoeCara
5AnnDan
6LeoLeo
7CaraMia
8DanZoe
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

在 A3 中输入 Abe,他就会排在第一位。=SORT(A2:A8,,-1) 按 Z 到 A 排序;两个逗号跳过了 sort_index。要按字母排序并去掉重复项,就对 UNIQUE 的结果排序:=SORT(UNIQUE(A2:A8))(参见 UNIQUE)。

SORTBY:按不在结果中的列排序

SORT 只能按它所返回区域中的某一列排序。SORTBY 把排序依据作为单独的区域传入,所以你可以只返回姓名,并按销售额排序:

按销售额排列的姓名
E2
ABCDE
1NameRegionSalesBy sales
2AnnNorth120Cara
3BenSouth80Dan
4CaraNorth200Ann
5DanEast150Eve
6EveSouth95Ben
7FinnNorth60Finn
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

结果是 Cara、Dan、Ann、Eve、Ben、Finn。语法是 =SORTBY(array, by_array1, [sort_order1], [by_array2, sort_order2], ...)。每个 by_array 的行数都必须和 array 相同,否则 SORTBY 返回 #VALUE!。

要取前 3 名,就取结果的前几行:=TAKE(SORTBY(A2:A7,C2:C7,-1),3) 返回 Cara、Dan 和 Ann。TAKE 需要 Microsoft 365 或 Excel 2024;在 Excel 2021 中使用 =INDEX(SORTBY(A2:A7,C2:C7,-1),SEQUENCE(3))。

按多列排序

每一级排序给 SORTBY 一组排序依据和顺序。下面先按地区从 A 到 Z 排序,同一地区内再按销售额从高到低排序:

地区 A 到 Z,再按销售额从高到低
E2
ABCDEFG
1NameRegionSalesNameRegionSales
2AnnNorth120DanEast150
3BenSouth80CaraNorth200
4CaraNorth200AnnNorth120
5DanEast150FinnNorth60
6EveSouth95EveSouth95
7FinnNorth60BenSouth80
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

East 排在最前,接着是 North 的三行,依次为 Cara(200)、Ann(120)和 Finn(60),最后是 South。SORT 用列号数组和顺序数组也能做到,不过 SORTBY 更容易读懂:

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

按自定义顺序排序

按字母排序并不总是你想要的顺序。要让地区按 North、East、South 排列,先用 MATCH 把每个地区换成它在这个列表中的位置,再按位置排序:

先 North,再 East,最后 South
E2
ABCDEFG
1NameRegionSalesNameRegionSales
2AnnNorth120AnnNorth120
3BenSouth80CaraNorth200
4CaraNorth200FinnNorth60
5DanEast150DanEast150
6EveSouth95BenSouth80
7FinnNorth60EveSouth95
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

MATCH 对 North 返回 1,对 East 返回 2,对 South 返回 3,SORTBY 再按这些数字排序。排序依据相同的行保持原来的顺序,所以 North 的几行仍然是 Ann、Cara、Finn。用同样的方法可以按名称给月份或星期几排序:在 MATCH 中按日历顺序列出它们即可。不在列表中的地区会让 MATCH 返回 #N/A;用 IFERROR(MATCH(B2:B7,{"North","East","South"},0),99) 作为排序依据,就能把这些行放到最后。

练习:按销售额排列姓名

轮到你了
E2
ABCDE
1NameRegionSalesBy sales
2AnnNorth120
3BenSouth80
4CaraNorth200
5DanEast150
6EveSouth95
7FinnNorth60
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 E2 中只返回姓名,按销售额从高到低排列。

SORT 函数还是“排序”按钮

两者都能排序,但用途不同:

数据 > 排序SORT 和 SORTBY
改变原表格是否,结果放在新的单元格中
数据变化时自动更新否,要重新排序是
适用于 Excel 2019 及更早版本是否
结果可以逐个单元格编辑是否,它是一个公式
可以嵌套在其他公式中否是,例如 =TAKE(SORT(A2:C7,3,-1),3)

只需整理一次表格时用按钮。报表或仪表板需要在数据变化时保持有序,就用函数。如果公式下方或右侧的单元格不是空的,函数会显示 #SPILL!,而不是排好序的列表;清空这些单元格,结果就会出现(参见 #SPILL! 错误)。

常见问题

Excel 中怎样用公式排序?

使用 SORT:=SORT(A2:C7,3,-1) 返回按第三列从大到小排序的 A2:C7。省略最后两个参数,写成 =SORT(A2:A8),就会按第一列从小到大排序,文本则按 A 到 Z 排序。

SORT 和 SORTBY 有什么区别?

SORT 按返回区域中的某一列排序,用列号指定。SORTBY 可以按你给出的任意区域排序,即使这个区域不在结果中:=SORTBY(A2:A7,C2:C7,-1) 只返回姓名,按销售额排序。SORTBY 还可以直接接受多个排序依据。

Excel 中怎样按字母顺序排列一个列表?

选中列表中的一个单元格,点击“数据 > 升序”,就能就地重新排列。如果想保留原始列表,再得到一份会自动更新的排序副本,就在空单元格中输入 =SORT(A2:A8);按 Z 到 A 排序用 =SORT(A2:A8,,-1)。

怎样用公式按两列排序?

给 SORTBY 两组排序依据和顺序:=SORTBY(A2:C7,B2:B7,1,C2:C7,-1) 先按地区从 A 到 Z 排序,同一地区内再按销售额从高到低排序。

哪些 Excel 版本有 SORT 和 SORTBY?

Excel 2021、Excel 2024 和 Microsoft 365。在 Excel 2019 及更早的版本中它们显示 #NAME?,这时要用“数据”选项卡上的“排序”按钮来排序。

Coddy 编程语言插图

和 Coddy 一起学编程

开始