跳转至

SORTBY 函数

函数概述

SORTBY 函数用于按一个或多个“排序依据”对数据进行排序,并返回排序后的结果(动态数组)。它的特点是:

  • 排序依据可以不在原数据区域内(只要与原数组行数/列数匹配即可)。
  • 支持多级排序(先按第1依据,再按第2依据……)。
  • 返回的是新结果,不会直接改动原数据。

适用场景:成绩表按总分+单科排序、订单按日期+金额排序、按自定义权重排序等。

基础语法

=SORTBY(array, by_array1, [sort_order1], [by_array2], [sort_order2], ...)

参数说明

参数 是否必填 说明
array 要排序并返回的原数组/区域
by_array1 第1排序依据数组/区域(行数或列数需与 array 对齐)
sort_order1 第1依据排序方式:1 升序,-1 降序(默认 1)
by_array2... 第2、第3…排序依据(用于多级排序)
sort_order2... 对应每个依据的排序方式

补充说明(对齐规则):

  • array 是多行多列的数据表,常见做法是 by_array 选同样“行数”的一列(按行排序)。
  • array 是单行数据(横向),by_array 通常也是同样“列数”的一行(按列排序)。

基础用法示范

示例数据

假设有如下表格(A1:D6):

姓名 部门 业绩 入职日
张三 销售 120 2023-03-01
李四 市场 95 2022-11-15
王五 销售 120 2021-07-20
赵六 研发 110 2024-01-10
钱七 市场 95 2020-05-08

用法一

按“业绩”降序排列整表

=SORTBY(A2:D6, C2:C6, -1)

含义:返回 A2:D6 的排序结果,排序依据是 C2:C6(业绩),-1 表示降序。


用法二

业绩降序,业绩相同按入职日升序

=SORTBY(A2:D6, C2:C6, -1, D2:D6, 1)

逻辑:

  1. 先按业绩从高到低;
  2. 若业绩相同,再按入职日从早到晚。

用法三

只返回两列,并按另一列排序

只想返回“姓名、业绩”两列,但仍按“入职日”升序排序:

=SORTBY(A2:A6, D2:D6, 1)

如果要返回两列组合,可用 CHOOSECOLS(新函数):

=SORTBY(CHOOSECOLS(A2:D6,1,3), D2:D6, 1)

含义:先从表里取第1列和第3列(姓名、业绩),再按入职日排序输出。


用法四

按自定义顺序排 需求:部门顺序固定为:研发 → 销售 → 市场。可用 MATCH 生成排序权重:

=SORTBY(A2:D6, MATCH(B2:B6, {"研发","销售","市场"}, 0), 1)

解释:

  • MATCH 返回“部门在自定义序列中的位置”作为权重;
  • 再按权重升序,达到自定义排序效果。

总结

SORTBY 的核心是:返回 array 的排序结果,但排序规则由 by_array 决定。掌握两点就能覆盖大多数场景:

  • by_array 与 array 的维度要对齐(按行或按列排序)。
  • 多级排序按“依据1、依据2...”依次写下去,每个依据都可独立设置升降序。

如果你经常需要“按隐藏字段排序”“按自定义顺序排”“多条件排序”,SORTBY 会比传统排序、更灵活也更易复用。