精通Excel数组公式022:提取唯一值列表并排序(续)

使用公式对数字进行排序

下图12展示了两个对数字进行排序的公式。使用SMALL/ROWS函数从小到大排序,使用LARGE/ROWS函数从大到小排序。

图12

使用辅助列公式对基于数字列的记录进行排序

如果目的是基于数字排序记录,可以使用辅助列来完成。下图13展示了如何在辅助列中使用RANK和COUNTIF函数。注意,COUNTIF函数用来统计公式所在单元格之前的区域中该单元格值出现的次数,这使得区域中相同的数字根据出现的顺序给出顺序值,而不是RANK函数给出的相同的顺序值。这使得后面使用INDEX/MATCH/ROWS函数提取记录更容易。

图13

使用数组公式对基于数字列的记录进行排序

下面的公式没有借助辅助列,而是使用数组公式对基于数字列的记录排序,如下图14所示。注意,第2个公式中COUNTIF函数解决了重复数字问题。

图14

使用公式提取前3名的成绩以及与这些成绩相关的名字

在商业和运动中经常要提取排在前n位的值及相关的名字。与前面的示例不同,不是排序并显示所有值,而是前几个值。如下图15所示,在单元格A11中的公式确定要显示的记录数。在Excel2010及以上版本中,可使用AGGREGATE函数来提取记录,如果是之前的版本,可以使用SMALL函数。

图15

使用辅助列对基于文本列的记录进行排序

如果想基于文本列排序,可以借助辅助列,如下图16所示。

图16

使用数组公式提取唯一值列表并排序混合数据

下图17展示了从混合数据中提取唯一值并排序的公式。

图17

一个超级长的公式!下面简要讲解该公式。

首先,排序结果基于Excel的排序顺序和ASCII字符,其中对于升序排序来说,Excel排序顺序为数字、文本(包括空文本字符串)、FALSE、TRUE、错误值、空单元格。有255个ASCII字符,相应使用数字1-255表示。

如下图18所示,对于单元格区域A2:A5中的数据,升序排列后的结果显示在单元格区域G2:G5。而单元格区域C2:C5中的数字表示,如果排序该列表,有几个数据在你的前面。例如,对于单元格A2中的数据(54678)来说,处于排序后的列表顶部,没有数据在其前面,因此为0;而数据(SD-987-56)在排序后有3个数据在其前面,因此为3。在公式中需要能够创建出这些数字。

图18

要创建单元格区域C2:C5中的数字,我们先来进行一些运算操作。

选择单元格区域E1:H1,输入数组公式:

=TRANSPOSE(A2:A5)

如下图19所示。

图19

接下来,选择单元格区域E2:H5,输入数组公式:

=A2:A5>E1:H1

如下图20所示。

图20

结果如下图21所示,为由TRUE和FALSE组成的矩形数组,对应着A2:A5中的值与E1:H1中相应的值比较后的结果值。注意到单元格区域E3:H3,有3个TRUE值和1个FALSE值,将3个TRUE值相加,结果为3,与上图18中的数字3相对应,表明该值前面有3个数据。

图21

下面,通过在公式前面加上双减号将TRUE和FALSE值转换为1和0,然后将结果相加,得到想要的数值组成的数组:{0;3;0;2}。如下图22、23、24和25所示。

图22

图23

图24

图25

使用--(A2:A5>TRANSPOSE(A2:A5))代替公式中的E2:H5,得到公式

=MMULT(--(A2:A5>TRANSPOSE(A2:A5)),{1;1;1;1})

使用ROW(A2:A5)^0代替公式中的数组常量:

=MMULT(--(A2:A5>TRANSPOSE(A2:A5)),ROW(A2:A5)^0)

如果不希望空单元格导致公式失败,使用IF(A2:A5<>””,A2:A5)代替公式中的A2:A5:

=MMULT(--(IF(A2:A5<>””,A2:A5)>TRANSPOSE(IF(A2:A5<>””,A2:A5))),ROW(A2:A5)^0)

由于公式要复制到其他单元格,需要将单元格修改为绝对引用:

=MMULT(--(IF($A$2:$A$5<>””,$A$2:$A$5)>TRANSPOSE(IF($A$2:$A$5<>””,$A$2:$A$5))),ROW($A$2:$A$5)^0)

因为上面的公式部分在最终的公式中出现了两次且过长,可以将其定义为名称,然后在公式中使用。如下图26所示,定义名称HMA。

图26

下面,创建公式中的提取数据部分。如下图27所示,在单元格A11中的公式有如下元素:

1.INDEX函数的参数array包含需要查找的数据所在的单元格区域。

2.第一个MATCH函数告诉INDEX要查找的数据项的相对位置。

3.暂时将MATCH函数的参数lookup_value的值留为空。

4.指定MATCH函数的参数lookup_array的值为定义的名称HMA。

5.指定MATCH函数的参数match_type为0,进行精确匹配查找,因为有重复值。

图27

在为MATCH函数指定参数lookup_value之前,必须考虑应该指定什么。有3个唯一值要排序,需要为lookup_value指定3个数字,随着公式向下复制时传递正确的相对位置给INDEX函数:

1.在单元格A11中,MATCH函数需要查找数字0,从定义的名称HMA中报告相对位置1。

2.当公式向下复制到单元格A12中,MATCH函数需要查找数字2,从定义的名称HMA中报告相对位置4.

3.当公式复制到单元格A13中时,MATCH函数需要查找数字3,从定义的名称HMA中报告相对位置2。

如下图28所示,公式中的元素:

MIN(IF(ISNA(MATCH($A$2:$A$5,A$10:A10,0)),HMA))

当公式向下复制时传递合适的最小数值。这是公式中的关键点(排除已经提取的值,取未提取且排名靠前的值),值得细细研究。

图28

添加更多的元素到MIN函数中,避免空单元格影响公式运行,如下图29所示。

图29

下图30展示了最终的公式。

图30

注:本文为电子书《精通Excel数组公式(学习笔记版)》中的一部分内容节选。你可以到知识星球App的完美Excel社群下载这本电子书的完整中文版。

(0)

相关推荐

  • 如何在Excel中分组排名?两个公式轻松搞定!

    教导主任给了我这次全校学生的期中考试成绩表,让我把每位同学所在班级排名名次以及在全校排名名次都列出来. 如果单纯做一种排名,比如全校排名我们可能会想到:直接把所有人分数做降序然后从上到下1,2,3-- ...

  • 青出于蓝的Excel函数:XLOOKUP

    VLOOKUP函数是所有使用Excel的朋友对非常熟悉的一个函数.尽管它有这样那样的缺陷,但是我们还是离不开它.几乎,在Excel的各种应用场景中,我们都会发现它的身影.为了更好地使用这个函数解决各种 ...

  • 精通Excel数组公式021:提取唯一值列表并排序

    excelperfect 本文将综合使用前面系列中学习到的技术,包括布尔逻辑.动态单元格区域.提取满足条件的数据.统计唯一值等,创建出一个解决问题的大型公式.当然,如果你不需要自动动态更新数据,完全可 ...

  • 精通Excel数组公式026:你弄清楚大型数组公式是怎么工作的吗?

    excelperfect 在本系列中,大部分内容都是在阐述特定数组公式如何工作的逻辑,但是假设你有一个大型的数组公式,却不知道它是如何工作的,你该怎么办?你已经学到了许多技术,弄清楚为什么一个公式正在 ...

  • 精通Excel数组公式025:LINEST数组函数

    excelperfect 如果正在进行与x-y直线数据集相关的统计计算,那么一定会喜欢LINEST函数.当使用最小二乘法将数据拟合到一条直线时,LINEST函数可以进行许多统计计算.下面列出了该函数可 ...

  • 精通Excel数组公式024:模拟运算表

    excelperfect 本文介绍模拟运算表功能,其使用TABLE函数创建一个结果数组.使用模拟运算表是一种对使用公式输入的公式进行假设分析的快速而简单的方法.该功能允许修改一个或两个公式输入,显示多 ...

  • 精通Excel数组公式020:MMULT数组函数

    excelperfect MMULT表示矩阵乘法(matrix multiplication).学习过前面文章的朋友,可能已经意识到乘法矩阵在Excel公式中有很多应用. 如下图1所示,两个不同队的棒 ...

  • 精通Excel数组公式018:FREQUENCY数组函数

    excelperfect FREQUENCY函数非常简单,但非常强大且功能丰富.本文介绍这个函数的基本用法,后续文章你将会看到该函数对困难的问题提供的令人惊叹的解决方案. FREQUENCY的基本用途 ...

  • 精通Excel数组公式019:FREQUENCY函数的威力

    excelperfect 在数据库中,表的第一列通常是称作为主键或唯一标识符的唯一值列表,用于验证为每个唯一标识符收集的数据是否位于一个且只有一个位置.在唯一值列表中没有重复值. 然而,在Excel中 ...

  • 精通Excel数组公式15:使用INDEX函数和OFFSET函数创建动态单元格区域(续)

    excelperfect 导语:本文为<精通Excel数组公式14:使用INDEX函数和OFFSET函数创建动态单元格区域>的后半部分. 将动态单元格区域公式定义为名称 创建动态单元格区域 ...

  • 精通Excel数组公式14:使用INDEX函数和OFFSET函数创建动态单元格区域

    excelperfect 动态单元格区域是指当添加或删除源数据时,或者随着包含单元格区域的公式被向下复制时根据某条件更改,可以自动扩展或收缩的单元格区域,可以用于公式.图表.数据透视表和其他位置. 那 ...