哇,这是我见过最牛的数组公式,没有之一

hell大家好,我是小E,今天分享2个有趣的数组公式,让我们一起看看吧~

按数字排序

根据B列的业绩,将A列的姓名从大到小排列(相当于按业绩降序),用公式实现。

D2单元格内输入公式:

{=INDEX($A$2:$A$7,

MATCH(LARGE($B$2:$B$7+0.1*ROW($B$2:$B$7),ROW()-1),$B$2:$B$7+0.1*ROW($B$2:$B$7),0))}

最外层的“{}”代表公式执行数组运算,是不需要手动输入的,同时按Ctrl+shift+enter三键,会自动出现这个花括号。

公式看着很长,其实理解起来非常简单,我们先来看MATCH函数的第一个参数:

LARGE($B$2:$B$7+0.1*ROW($B$2:$B$7),ROW()-1)

这一长串构成了MATCH函数的第一个参数——查找值

LARGE函数返回数组中第k个最大值,第一个参数之所以要加上“0.1*ROW($B$2:$B$7)” 是为了防止重复值的出现,如果数据没有重复值,把它去掉也无妨,第一个参数返回以下数组:

ROW函数返回单元格所在的行,当前单元格为D2,所以函数返回2,row()-1返回1,所以返回上面构造数组中的第一大值,即“935.7”,也就是MATCH的第一个参数。

接着再来看MATCH函数第二个参数查找区域:

$B$2:$B$7+0.1*ROW($B$2:$B$7)

可以发现就是上面LARGE函数的第一个参数,构造了一个非重复数组,在其中查找“935.7”的位置,它处于数组的第6行;

所以MATCH函数返回数字6;

最后利用INDEX函数,返回指定区域中的值,在$A$2:$A$7的内容中,找第6个值,即“谢雯”。

至此,我们找到了最大值,接着公式下拉,查找第二大值,可以发现的是,公式唯一变动点在于ROW()-1,D2返回1、D3返回2、D4返回3…..

依次找到构造数组中第k大的值的位置,再结合INDEX函数返回对应的姓名,完成排序。

tips:如果你的Excel版本是2022或365,可以使用SORT函数,直接完成排序。

当然你也可以直接筛选降序,函数的好处在于新增数据时,不需要二次操作。

接着我们再来看第二个数组公式。

提取非重复值

下图中,在C列提取A列的非重复姓名。

C2单元格输入公式:

{=IFERROR(INDEX(A$2:A$10,MATCH(0,COUNTIF(C$1:C1,A$2:A$10),)),””)}

最外层的“{}”同上,同时按Ctrl+shift+enter三键,会自动出现。

输入完公式之后,向下填充,即可提取非重复值。

动图展示如下:

公式解读:

公式有点长,不要担心,无非就是涉及到4个函数的嵌套使用,4个函数都是常见的,我们从内向外看。

一、查找第一个非重复值

1、COUNTIF函数计算某个区域中满足给定条件的单元格数目,这里的C2单元格公式为:

COUNTIF(C$1:C1,A$2:A$10)

可以理解为在C1单元格中查找A2:A10单元格的个数,在以往的函数中,条件参数只能输入一个单元格,而这里选择了一个区域“A2:A10”作为参数,正常情况下只能返回一个值,而这里执行的是数组运算,所以公式会返回一个数组:

={0;0;0;0;0;0;0;0;0}

是的,9个0,因为在C1单元格中,找不到任何A2:A10的内容。

2、接着利用MATCH函数在返回的结果中匹配0的位置,MATCH函数会返回首个匹配到的值所在的位置,{0;0;0;0;0;0;0;0;0}第一个就是0,所以MATCH函数返回1。

3、最后利用INDEX函数返回A$2:A$10中对应的位置,上面MATCH返回1,所以INDEX返回A2单元格内容,即查找到第一个非重复值。

一、查找第二个非重复值

公式在下拉到C3单元格的时候,唯一的变化是COUNTIF函数的第一个参数由“C$1:C1”变成了“C$1:C2”,这正是提取非重复值的关键。

1、C3单元格公式为:

COUNTIF(C$1:C2,A$2:A$10)

C1:C2单元格中查找A2:A10单元格的个数,返回结果:

={1;1;0;0;0;0;0;0;0}

A2&A3单元格内容为“曾惠”,存在于C1:C2区域中,所以返回1,其它单元格内容查找不到,所以返回0;

2、接着利用MATCH函数在返回的结果中匹配0的位置,MATCH函数会返回首个匹配到的值所在的位置,{1;1;0;0;0;0;0;0;0}第3个就0,所以MATCH函数返回3。

3、最后利用INDEX函数返回A$2:A$10中对应的位置,上面MATCH返回3,所以INDEX返回A4单元格内容,跳过A3(重复值),即查找到第二个非重复值。

…………………………

以此类推,直到查找出所有的非重复值。

最后的IFERROR函数是规避错误值。

tips:如果你的Excel版本是2022或365,可以使用UNIQUE函数,直接返回非重复值。

当然你也可以通过删除重复值、高级筛选、透视表等非函数手段实现重复值的提取。

小结

通过以上两个案例,我们了解了数组公式的运作原理,以及简单函数组合使用可以实现意想不到的效果,希望对你有所帮助,我们下期再见。

© 版权声明
THE END