按公式排序

如果您需要对列表进行排序,那么有很多方法可以为您服务,其中最简单的方法是选项卡或菜单中的排序按钮 时间 (数据——排序). 但是,有些情况需要自动完成列表的排序,即公式。 这可能是必需的,例如,在为下拉列表生成数据时,在为图表计算数据时等。如何使用公式对列表进行动态排序?

方法 1. 数值数据

如果列表仅包含数字信息,则可以使用函数轻松完成排序 最小 (小的) и LINE (排):

 

功能 最小 (小的) 从数组(A 列)中取出一行中第 n 个最小的元素。 那些。 SMALL(A:A;1) 是列中最小的数字,SMALL(A:A;2) 是第二小的数字,依此类推。

功能 LINE (排) 返回指定单元格的行号,即 ROW(A1)=1, ROW(A2)=2 等。在这种情况下,它仅用作数字序列 n=1,2,3... 的生成器我们的排序列表。 以同样的成功,可以创建一个额外的列,用数字序列 1,2,3 手动填充它......并引用它而不是 ROW 函数。

方法 2. 文本列表和正则公式

如果列表包含的不是数字,而是文本,那么 SMALL 功能将不再起作用,因此您必须采用不同的、稍长的路径。

首先,让我们添加一个带有公式的服务列,其中将使用函数计算未来排序列表中每个名称的序列号 COUNTIF (县):

在英文版中,它将是:

=COUNTIF(A:A,»<"&A1)+COUNTIF($A$1:A1,"="&A1)

第一项是计算小于当前单元格的单元格数量的函数。 第二个是安全网,以防任何名称多次出现。 然后他们将不会有相同的,而是连续增加的数字。

现在接收到的号码必须按升序排列。 为此,您可以使用该功能 最小 (小的) 从第一种方式:

 

好吧,最后,它仍然只是通过他们的数字从列表中拉出名字。 为此,您可以使用以下公式:

 

功能 更多曝光 (匹配) 在 B 列中搜索所需的序列号(1、2、3 等),实际上,返回该编号所在行的编号。 功能 指数 (指数) 从 A 列中提取此行号处的名称。

方法三:数组公式

这种方法实际上与方法 2 中的放置算法相同,但通过数组公式实现。 为了简化公式,单元格范围 C1:C10 被命名为 清单 (选择单元格,按 Ctrl + F3键 和按钮 创建):

 

在单元格 E1 中,复制我们的公式:

=索引(列表;匹配(小(COUNTIF(列表;“<”&列表);行(1:1));COUNTIF(列表;“<”&列表;0))

或者在英文版中:

=INDEX(列表, MATCH(SMALL(COUNTIF(List, «<"&List), ROW(1:1)), COUNTIF(List, "<"&List), 0))

并推 Ctrl + Shift + Enter将其作为数组公式输入。 然后可以将生成的公式复制到列表的整个长度。

如果您希望公式考虑的不是固定范围,而是能够在向列表中添加新元素时进行调整,那么您将需要稍微改变策略。

首先,列表范围需要动态设置。 为此,在创建时,您需要指定的不是固定范围 C3:C10,而是一个特殊公式,它将引用所有可用值,而不管它们的数量。 点击 Alt + F3键 或打开标签 公式 - 名称管理器 (公式 - 名称管理器),创建一个新名称并在该字段中 链接 (参考) 输入以下公式(我假设要排序的数据范围从单元格C1开始):

=СМЕЩ(C1;0;0;СЧЁТЗ(C1:C1000);1)

=OFFSET(C1,0,0,SCHÖTZ(C1:C1000),1)

其次,上述数组公式将需要向下延伸,以期将来输入更多数据。 在这种情况下,数组公式将开始在尚未填充的单元格上给出错误 #NUMBER。 要拦截它,您可以使用该函数 IFERROR,需要在我们的数组公式“周围”添加:

=如果错误(索引(列表;匹配(小(COUNTIF(列表;“<”&列表);ROW(1:1));COUNTIF(列表;“<”&列表;0));»»)

=IFERROR(NDEX(List, MATCH(SMALL(COUNTIF(List, «<"&List), ROW(1:1)), COUNTIF(List, "<"&List), 0));"")

它捕获 #NUMBER 错误并改为输出 void(空引号)。

:

  • 按颜色排序范围
  • 什么是数组公式以及为什么需要它们
  • 新 Office 365 中的 SORT 排序和动态数组

 

发表评论