Excel SORTBY函数--用公式自定义排序

  • Share This
Michael Brown

今天我们将仔细研究新的动态数组SORTBY函数的语法和典型用途。 你将学习如何在Excel中用公式进行自定义排序,对列表进行随机排序,按文本长度排列单元格,等等。

Microsoft Excel提供了许多方法,可以按字母顺序排列文本数据,按时间顺序排列日期,按从小到大或从高到低排列数字。 还有一种方法是按您自己的自定义列表进行排序。 除了传统的排序功能外,Excel 365还引入了一种全新的方法,即用公式对数据进行排序--非常方便,使用起来也无比简单

    Excel的SORTBY函数

    Excel中的SORTBY函数旨在根据另一个范围或数组中的数值对一个范围或数组进行排序。 排序可以通过一个或多个列来完成。

    SORTBY是Excel for Microsoft 365和Excel 2021中的六个新的动态数组函数之一。 它的结果是一个动态数组,当源数据发生变化时,会溢出到邻近的单元格并自动更新。

    SORTBY函数有一个数量不等的参数--前两个是必须的,其他是可选的。

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

    阵列 (required) - 要排序的单元格或数组的数值范围。

    按顺序排列1 (required) - 要排序的范围或数组。

    排序_顺序1 (可选) - 排序顺序。

    • 1或省略(默认)--升序排列
    • -1 - 降级

    按顺序排列2 / 排序_顺序2 , ... (可选) - 用于排序的额外数组/顺序对。

    重要提示!目前,SORTBY功能仅适用于Microsoft 365订阅和Excel 2021。 在Excel 2019、Excel 2016和早期版本中,SORTBY功能不可用。

    SORTBY功能--需要记住4点

    要使Excel的SORTBY公式正常工作,有几个重要的点需要注意。

    • 按排列方式 参数应该是一行高或一列宽。
    • ǞǞǞ 阵列 和所有 by_array 参数必须有兼容的尺寸。 例如,当按两列排序时。 阵列 , by_array1 by_array2 应该有相同的行数;否则会发生#VALUE错误。
    • 如果SORTBY返回的数组是最终结果(在单元格中输出,而不是传递给另一个函数),Excel会创建一个动态溢出区,并将结果填入其中。 因此,要确保在你输入公式的单元格下面和/或右边有足够的空单元格,否则你会得到一个#SPILL错误。
    • 每当源数据发生变化时,SORTBY公式的结果就会自动更新。 然而,在公式中引用的数组之外添加的新条目不会包括在结果中,除非你更新了 阵列 为了使引用的数组自动展开,请将源范围转换为Excel表或创建一个动态命名的范围。

    Excel中的基本SORTBY公式

    下面是一个在Excel中使用SORTBY公式的典型场景。

    假设,你有一个项目列表,其中有 价值 你想在另一张纸上按项目的价值进行排序。 由于其他用户不需要看到这些数字,你宁愿不包括 价值 结果中的一栏。

    这项任务可以通过SORTBY函数轻松完成,你可以为它提供以下参数。

    • 阵列 是A2:A10 - 因为你不希望 价值 列要显示在结果中,你就不要把它放在数组中。
    • 按顺序排列1 是B2:B10 - 按以下方式排序 价值 .
    • 排序_顺序1 是-1-降,即从高到低。

    把这些论点放在一起,我们得到这个公式。

    =sortby(a2:b10, b2:b10, -1)

    为了简单起见,我们在同一工作表上使用公式--在D2中输入公式并按下回车键。 结果会根据需要自动 "溢出 "到多个单元格(在我们的例子中是D2:D10)。 但从技术上讲,公式只在第一个单元格中,从D2中删除它将删除所有结果。

    当在另一个工作表上使用时,该公式的形状如下。

    =SORTBY(Sheet1! A2:A10, Sheet1! B2:B10, -1)

    在哪里? 第1张 是包含原始数据的工作表。

    在Excel中使用SORTBY函数--公式实例

    下面你会发现一些使用SORTBY的例子,希望这些例子能证明是有用的和有见地的。

    按多列排序

    上面讨论的基本公式是按一列排序的。 但如果你需要增加一级排序呢?

    假设我们的样本表有两个字段。 状况 (B栏)和 价值(C列) ,我们希望首先按 状况 按字母顺序排列,然后按 价值 递减。

    要按两列排序,我们只需再添加一对 by_array / 排序_顺序 争论。

    • 阵列 是A2:C10 - 这一次,我们希望在结果中包括所有三列。
    • 按顺序排列1 是B2:B10 - 首先,按以下方式排序 状况 .
    • 排序_顺序1 是1 - 按字母顺序从A到Z排序。
    • 按顺序排列2 是C2:C10 - 然后,按以下方式排序 价值 .
    • 排序_顺序2 是-1 - 从大到小排序。

    作为结果,我们得到以下公式。

    =sortby(a2:b10, b2:b10, 1, c2:c10, -1)

    它完全按照我们的指示重新排列我们的数据。

    在Excel中用公式自定义排序

    要按自定义顺序对数据进行排序,你可以使用Excel的自定义排序功能,或者用这种方式建立一个SORTBY MATCH公式。

    SORTBY(array, MATCH( 范围_到_排序 , 自定义列表 , 0))

    仔细看看我们的数据集,你可能会发现按项目的状态 "逻辑 "排序,例如按重要性排序,比按字母顺序排序更方便。

    要做到这一点,我们首先以所需的排序顺序创建一个自定义列表( 正在进行中 , 已完成 , 搁置中 )在E2:E4范围内的单独单元格中输入每个值。

    然后,使用上面的通用公式,我们提供源范围为 阵列 (A2:C10),。 状况 栏目为 范围_到_排序 (B2:B10),以及我们为 自定义列表 (E2:E4)。

    =sortby(a2:c10, match(b2:b10, e2:e4, 0))

    结果是,我们完全按照需要对项目的状态进行了分类。

    要按自定义列表反向排序,将-1放在 sort_order1 争论。

    =sortby(a2:c10, match(b2:b10, e2:e4, 0), -1)

    而你会把项目按相反的方向进行分类。

    想在每个状态下对记录进行额外的排序吗? 没问题,只需在公式中增加一个排序级别,例如通过 价值 (C2:C10),并定义所需的排序顺序,在我们的例子中为升序。

    =sortby(a2:c10, match(b2:b10, e2:e5, 0), 1, c2:c10, 1)

    与Excel的自定义排序功能相比,SORTBY公式的一大优势是,只要原始数据发生变化,公式就会自动更新,而该功能则需要在每次变化时进行清理和重新排序。

    这个公式如何运作。

    如前所述,Excel的SORTBY函数只能处理尺寸与源数组一致的 "排序 "数组。 由于我们的源数组(C2:C10)包含9行,而自定义列表(E2:E4)只有3行,我们不能直接将其提供给 by_array 相反,我们使用MATCH函数来创建一个9行的数组。

    匹配(b2:b10, e2:e5, 0)

    在这里,我们使用 状况 最后一个参数被设置为0,以寻找完全匹配。 结果,我们得到一个由9个数字组成的数组,每个数字代表一个给定的相对位置。 状况 价值在自定义列表中。

    {1;3;2;1;3;2;2;1;2}

    这个阵列直接进入 by_array SORTBY函数的参数,并强制它按照数组元素的顺序来放置数据,即首先用1表示的条目,然后用2表示的条目,以此类推。

    在Excel中用公式进行随机排序

    在早期的Excel版本中,你可以用RAND函数进行随机排序,如本教程所介绍的:如何在Excel中对列表进行随机排序。

    在新的Excel中,你可以和SORTBY一起使用更强大的RANDARRAY函数。

    SORTBY( 阵列 , randarray(rows( 阵列 )))

    在哪里? 阵列 是你要洗的源数据。

    这个通用公式既适用于由单列组成的列表,也适用于多列范围。

    例如,要对A2:A10的列表进行随机排序,请使用这个公式。

    =sortby(a2:a10, randarray(rows(a2:a10)))

    要洗刷A2:C10中的数据,使这些行保持在一起,请使用这个方法。

    =sortby(a2:c10, randarray(rows(a2:c10))

    这个公式如何运作。

    RANDARRAY函数产生一个用于排序的随机数组,你将其传入 by_array 为了指定生成多少个随机数,你可以使用ROWS函数计算源范围内的行数,并将这个数字 "送 "给SORTBY。 行数 RANDARRAY的论点,就是这样!"。

    注意:和它的前身一样,RANDARRAY是一个不稳定的函数,它在每次重新计算工作表时都会生成一个新的随机数组。 因此,你的数据会随着工作表的每次变化而被调用。 为了防止自动调用,你可以使用 粘贴专用 > 价值观 功能,以其值替换公式。

    按字符串长度对单元格进行排序

    要根据单元格所包含的文本字符串的长度对其进行排序,可以使用LEN函数来计算每个单元格中的字符数,并将计算出的长度提供给 by_array 的参数。 排序_顺序 参数可以被设置为1或-1,这取决于首选的排序顺序。

    按文本字符串从小到大排序。

    SORTBY(array, LEN(array), 1)

    按文本字符串从大到小排序。

    SORTBY(array, LEN(array), -1)

    而这里有一个公式,在真实数据上展示了这种方法。

    =sortby(a2:a7, len(a2:a7), 1)

    其中A2:A7是你想按文本长度升序排序的原始单元格。

    SORTBY与SORT

    在新的Excel动态数组函数中,有两个是为排序而设计的。 下面我们列出了最基本的区别和相似之处,以及各自的最佳使用时间。

    • 与SORT函数不同,SORTBY不要求 "sort by "数组是源数组的一部分,也不需要在结果中出现。 因此,当你的任务是基于另一个独立数组或自定义列表对一个范围进行排序时,SORTBY是正确的函数。 如果你想基于一个范围的自身值进行排序,那么SORT更合适。
    • 这两个函数都支持多级排序,而且都可以与其他动态数组和常规函数连锁。
    • 这两个功能只适用于Excel 365和Excel 2021用户。

    Excel的SORTBY函数不工作

    如果你的SORTBY公式返回错误,很可能是由于以下原因之一。

    无效的by_array参数

    ǞǞǞ by_array 参数必须是单行或单列,并且在大小上与 阵列 例如,如果 阵列 有10行。 by_array 否则会出现#VALUE!的错误。

    无效的sort_order参数

    ǞǞǞ 排序_顺序 参数只能是1(升序)或-1(降序)。 如果没有设置任何值,SORTBY默认为升序。 如果设置了任何其他值,将返回一个#VALUE!错误。

    没有足够的空间来显示结果

    像其他动态数组函数一样,SORTBY将结果溢出到一个可自动调整大小和更新的范围内。 如果没有足够的空单元格来显示所有的值,会抛出一个#SPILL!错误。

    源工作簿已关闭

    如果一个SORTBY公式引用了另一个Excel文件,两个工作簿都需要打开。 如果源工作簿被关闭,会出现#REF!错误。

    你的Excel版本不支持动态数组

    当在Excel的前动态版本中使用时,SORT函数返回一个#NAME? 的错误。

    这就是如何在Excel中使用SORTBY函数来做自定义排序和其他事情。 感谢你的阅读,希望下周能在我们的博客上见到你!

    供下载的实践工作手册

    Excel SORTBY公式(.xlsx文件)。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.