如何实现在引用数据的同时,按某一列自动排序

webp


上周到某家银行企业培训的时候,学员小K咨询如何实现在引用数据的同时,按某一列自动排序。我举例说明一下小K的问题,比如现在我有两个月的工资明细表。

webp

1月工资表

webp

2月工资表

两张表格的数据结构是一样的,现在要将这些数据引用到另一张工作表,希望在引用的同时能自动按工资列降序排列。

要实现按工资列降序排列,我们就需要在引用的结果的第一行显示工资列的第1个最大值、第二行显示第2个最大值,这个需求可以利用LARGE函数和ROW函数来实现。我们先来了解这两个函数的语法。

第几个最大值:LARGE(区域,第几个最大值)

返回行号:ROW(单元格地址)

webp

最里面一层的函数我们用LARGE+ROW引用到201901表中工资列,并降序排列。

=LARGE([201901.xlsx]Sheet1!$E:$E,ROW(A1))

ROW(A1)返回的是A1单元格的行号,也就是1,往下复制公式的时候,就会变成A2的行号,用这个公式可以形成1、2、3……的递增数字,表示第N个最大值的序号。

接着我们再外面嵌套MATCH函数,在《Excel中最牛查找函数组合Index+Match》一文中我们介绍过INDEX和MATCH两个组合函数,我们再来复习一下。

MATCH函数返回指定数值在指定的一行或一列的数据区域中的位置。

MATCH(查询值,包含查询值的一行或一列,0/1)

最后一个参数的作用和Vlookup函数相同,0表示精确查询,1表示升序区间表模糊查询。

我们利用MATCH函数找到每个工资在201901工资列中对用的行号。

=MATCH(LARGE([201901.xlsx]Sheet1!$E:$E,ROW(A1)),[201901.xlsx]Sheet1!$E:$E,0)

webp

有了位置之后,我们就可以用INDEX函数,根据位置到源表中引用出对应的数据。

INDEX函数是返回表或区域中的值或对值的引用。返回特定行和列交叉处单元格的引用。如果该引用是由非连续选定区域组成的,则可以选择要用作查找范围的选定区域。

INDEX(数据源表,取第几行,取第几列)


webp

本例子中的公式是:=INDEX([201901.xlsx]Sheet1!A:A,MATCH(LARGE([201901.xlsx]Sheet1!$E:$E,ROW(A1)),[201901.xlsx]Sheet1!$E:$E,0))

接着把公式复制粘贴到其他列,就可以得到按工资降序的表格了。

webp

如果现在要更改引用的表格,比如更改为201702的表格,直接用替换功能替换表格名称就可以了。从下面的动图可以看到,更改完数据源之后,数据会自动按最新的数据的工资列降序排列。

webp

这样我们就实现了在引用数据的同时,按某一列自动排序,我们简单总结一下:

第几个最大值:LARGE(区域,第几个最大值)

返回行号:ROW(单元格地址)

查询位置:MATCH(查询值,包含查询值的一行或一列,0/1)

行和列交叉处单元格的引用:INDEX(数据源表,取第几行,取第几列)


猜你喜欢

转载自blog.51cto.com/12297439/2420531
今日推荐