如何实现在引用数据的同时,按某一列自动排序
上周到某家银行企业培训的时候,学员小K咨询如何实现在引用数据的同时,按某一列自动排序。我举例说明一下小K的问题,比如现在我有两个月的工资明细表。
1月工资表
2月工资表
两张表格的数据结构是一样的,现在要将这些数据引用到另一张工作表,希望在引用的同时能自动按工资列降序排列。
要实现按工资列降序排列,我们就需要在引用的结果的第一行显示工资列的第1个最大值、第二行显示第2个最大值,这个需求可以利用LARGE函数和ROW函数来实现。我们先来了解这两个函数的语法。
第几个最大值:LARGE(区域,第几个最大值)
返回行号:ROW(单元格地址)
最里面一层的函数我们用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)
有了位置之后,我们就可以用INDEX函数,根据位置到源表中引用出对应的数据。
INDEX函数是返回表或区域中的值或对值的引用。返回特定行和列交叉处单元格的引用。如果该引用是由非连续选定区域组成的,则可以选择要用作查找范围的选定区域。
INDEX(数据源表,取第几行,取第几列)
本例子中的公式是:=INDEX([201901.xlsx]Sheet1!A:A,MATCH(LARGE([201901.xlsx]Sheet1!$E:$E,ROW(A1)),[201901.xlsx]Sheet1!$E:$E,0))
接着把公式复制粘贴到其他列,就可以得到按工资降序的表格了。
如果现在要更改引用的表格,比如更改为201702的表格,直接用替换功能替换表格名称就可以了。从下面的动图可以看到,更改完数据源之后,数据会自动按最新的数据的工资列降序排列。
这样我们就实现了在引用数据的同时,按某一列自动排序,我们简单总结一下:
第几个最大值:LARGE(区域,第几个最大值)
返回行号:ROW(单元格地址)
查询位置:MATCH(查询值,包含查询值的一行或一列,0/1)
行和列交叉处单元格的引用:INDEX(数据源表,取第几行,取第几列)