数据处理往往都伴随着数据分析,正所谓数据处理的方法是相似的,不同的业务目的有着不同的数据分析,这也不可避免地涉及排名,尤其是当数据与绩效关联时,排名更是无法回避。RANK函数就是用来对数据进行排名的。
RANK函数的语法为:RANK(Number,Ref,[Order]),第三个参数Order省略情况下默认为降序排序(如果Order不为零,则按照升序排列),如图2-57所示,在D3单元格中输入公式=RANK(C3,$C$3:$C$9),将公式向下复制填充,就能得出每个地区的销量排名。
图2-57 RANK函数求排名
要注意的是,使用RANK进行排名时,对重复数会给出相同的排名。在图2-57中,华中和西南地区的排名均为第4,但重复数的存在将影响后续数值的排位,比如西北的销量为85,排在华中和西南之后,华中和西南排位为第4,而西北的排位为第6(没有排位为5的数值)。
不出现相同排名指的是相同的数值以出现顺序进行优先排列,如图2-58所示,华中和西南的销量相同,排名都为第4,如果不想让它们出现相同的排名,而是以华中优先参与排名,排名为第4,西南后参与排名,排名为第5,这样的排名要怎么做?
图2-58 出现相同排名
这其实就是按照出现的先后顺序进行优先排名,所以在排名的时候,增加每个数值出现的次数统计即可,在COUNTIF函数中,我们知道如何统计某一数值出现的次序,如图2-59所示,在D3单元格中输入公式:
=RANK(C3,$C$3:$C$9)+COUNTIF($C$3:C3,C3)-1
图2-59 RANK与COUNTIF结合排名
可以发现,排名是按出现的顺序依次进行的。
COUNTIF的关键在于其应用,COUNTIF($C$3:C3,C3)-1公式中第一个$C$3是绝对引用,当向下拖动公式时,即可以得到相应的数据是第几次出现的,然后加上原始排名即可。
在实际应用中,我们还有中国式排名,其特点是:如果遇到并列,接下来的排名会延续上一个排名,比如第二名并列,下一个名次是第三名。使用RANK测出的排名属于普通排名,下一节的SUMPRODUCT中会介绍如何进行中国式排名。
利用RANK函数能够轻松得出各数值的排名,但是关于数值之间的大小关系比较笼统。统计中还涉及数据大小问题,相关的函数是LARGE函数和SMALL函数。
LARGE函数的作用是找出排在第几大的数字,语法形式是LARGE(Array,k),翻译成中文就是:LARGE(查找的区域,指定要找第几大),从函数的语法可以看出,LRGE函数返回的不是数值的排序,而是返回指定大小的数值,如图2-60所示。
图2-60 LARGE函数案例
利用LARGE函数可以实现数值的动态排序,一定要理解这里的排序,而非排名。如图2-61所示,左表记录的是每个地区的销量,在一份报表中,销量每月都会更新,我们想要的效果是更新完销量数据之后,数据表自动按降序进行排序。(注意:这对制作动态图表非常有用。)
图2-61 对数据进行自动排序
要实现数据表的排序,在不使用VBA和排序菜单的情况下,是无法直接实现的,我们需要设置辅助表来完成。
Step1: 对本月销量进行降序排序。
如图2-62所示,在右侧表的F3单元格中输入公式=LARGE($C$3:$C$9, ROW(A1)),将其向下复制填充,即可对销量进行降序排序。
图2-62 LARGE函数实现排序
=LARGE($C$3:$C$9,ROW(A1)),第二个参数使用ROW(A1)构造动态值,其返回值是1,也就是在F3单元格中返回排名第1的销量值,通过公式向下复制填充,依次返回排名第2、第3……的销量值,从而实现降序排序。
Step2: 通过销量匹配地区。
得到销量的降序值后,接下来需要在E列中匹配对应的地区,这是一个逆向查询的过程,在E3单元格输入公式=INDEX($B$3:$B$9,MATCH(F3,$C$3:$C$9,0)),向下复制填充,即可返回对应的地区,如图2-63所示。
图2-63 通过销量逆向查找地区
本例中公式的写法并不难,但是反映了一个很好的思路:通过公式将两个表格进行链接。这样链接之后,只要左表中的销量发生了变化,右侧的数据表就能随时更新并重新进行排序。
排名函数中还有两个函数MAX和MIN,分别是求一组数据中的最大值和最小值。LARGE、SMALL与它们相比,返回的不是极值,而是第 K 个值。说到这里,大家可能想到:如果K=1或者K=n(假定数据集中有 n 个数据),是不是就可以返回数据集的最大值或者最小值了?换句话说,LARGE函数和SMALL函数可以互换,而MAX、MIN函数则是LARGE函数和SMALL函数的特殊形式。