=SORT(A2:C7,3,-1) 返回按第三列(销售额)从大到小排序的 A2:C7 表格。原表格保持不变;排好序的副本从公式所在单元格溢出,数字一变就会自动重新排序。把 C7 改成 300,Finn 就会排到最前面。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Name | Region | Sales | Name | Region | Sales | |
| 2 | Ann | North | 120 | Cara | North | 200 | |
| 3 | Ben | South | 80 | Dan | East | 150 | |
| 4 | Cara | North | 200 | Ann | North | 120 | |
| 5 | Dan | East | 150 | Eve | South | 95 | |
| 6 | Eve | South | 95 | Ben | South | 80 | |
| 7 | Finn | North | 60 | Finn | North | 60 |
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 | B | C | |
|---|---|---|---|
| 1 | Name | A to Z | |
| 2 | Mia | Ann | |
| 3 | Ben | Ben | |
| 4 | Zoe | Cara | |
| 5 | Ann | Dan | |
| 6 | Leo | Leo | |
| 7 | Cara | Mia | |
| 8 | Dan | Zoe |
在 A3 中输入 Abe,他就会排在第一位。=SORT(A2:A8,,-1) 按 Z 到 A 排序;两个逗号跳过了 sort_index。要按字母排序并去掉重复项,就对 UNIQUE 的结果排序:=SORT(UNIQUE(A2:A8))(参见 UNIQUE)。
SORTBY:按不在结果中的列排序
SORT 只能按它所返回区域中的某一列排序。SORTBY 把排序依据作为单独的区域传入,所以你可以只返回姓名,并按销售额排序:
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Region | Sales | By sales | |
| 2 | Ann | North | 120 | Cara | |
| 3 | Ben | South | 80 | Dan | |
| 4 | Cara | North | 200 | Ann | |
| 5 | Dan | East | 150 | Eve | |
| 6 | Eve | South | 95 | Ben | |
| 7 | Finn | North | 60 | Finn |
结果是 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 | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Name | Region | Sales | Name | Region | Sales | |
| 2 | Ann | North | 120 | Dan | East | 150 | |
| 3 | Ben | South | 80 | Cara | North | 200 | |
| 4 | Cara | North | 200 | Ann | North | 120 | |
| 5 | Dan | East | 150 | Finn | North | 60 | |
| 6 | Eve | South | 95 | Eve | South | 95 | |
| 7 | Finn | North | 60 | Ben | South | 80 |
East 排在最前,接着是 North 的三行,依次为 Cara(200)、Ann(120)和 Finn(60),最后是 South。SORT 用列号数组和顺序数组也能做到,不过 SORTBY 更容易读懂:
=SORT(A2:C7,{2,3},{1,-1})
按自定义顺序排序
按字母排序并不总是你想要的顺序。要让地区按 North、East、South 排列,先用 MATCH 把每个地区换成它在这个列表中的位置,再按位置排序:
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Name | Region | Sales | Name | Region | Sales | |
| 2 | Ann | North | 120 | Ann | North | 120 | |
| 3 | Ben | South | 80 | Cara | North | 200 | |
| 4 | Cara | North | 200 | Finn | North | 60 | |
| 5 | Dan | East | 150 | Dan | East | 150 | |
| 6 | Eve | South | 95 | Ben | South | 80 | |
| 7 | Finn | North | 60 | Eve | South | 95 |
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) 作为排序依据,就能把这些行放到最后。
练习:按销售额排列姓名
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Region | Sales | By sales | |
| 2 | Ann | North | 120 | ||
| 3 | Ben | South | 80 | ||
| 4 | Cara | North | 200 | ||
| 5 | Dan | East | 150 | ||
| 6 | Eve | South | 95 | ||
| 7 | Finn | North | 60 |
轮到你了: 在 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?,这时要用“数据”选项卡上的“排序”按钮来排序。