Table of contents
该教程解释了Excel排名函数的特殊性,并展示了如何在Excel中根据多个标准进行排名,按组进行数据排名,计算百分位数排名等。
当你需要确定一个数字在一个数字列表中的相对位置时,最简单的方法是按升序或降序对数字进行排序。 如果由于某种原因无法进行排序,Excel中的Rank公式是完成这项工作的完美工具。
Excel的RANK函数
在Excel中,RANK函数返回一个数值与同一列表中其他数值相比的顺序(或等级)。 换句话说,它告诉你哪个数值是最高的,哪个是第二高的,等等。
在一个排序的列表中,某个数字的等级就是它的位置。 Excel中的RANK函数可以从最大的数值(如按降序排序)或最小的数值(如按升序排序)开始确定其等级。
Excel RANK函数的语法如下。
RANK(number,ref,[order])在哪里?
数量 (必填)--你想找到其等级的值。
参考资料 (required) - 一个要进行排名的数值列表。 它可以作为一个数字数组或数字列表的引用来提供。
秩序 (可选) - 一个数字,指定如何对数值进行排序。
- 如果是0或省略,则数值按降序排列,即从大到小排列。
- 如果是1或其他非零值,则按升序排列,即从最小到最大的顺序排列。
Excel RANK.EQ函数
RANK.EQ是RANK函数的改进版,在Excel 2010中引入。 它的语法与RANK相同,工作逻辑也相同:如果几个值的排名相同,则将最高排名分配给所有这些值。 EQ代表 "相等")。
RANK.EQ(number,ref,[order])在Excel 2007和更低版本中,你应该始终使用RANK函数。 在Excel 2010、Excel 2013和Excel 2016中,你可以使用RANK或RANK.EQ。然而,使用RANK.EQ是明智的,因为RANK随时可能被停止使用。
Excel的RANK.AVG函数
RANK.AVG是另一个在Excel中查找排名的函数,只在Excel 2010、Excel 2013、Excel 2016及以后的版本中可用。
它的语法与其他两个函数相同。
RANK.AVG(number,ref,[order])不同的是,如果一个以上的数字具有相同的等级,则 平均等级 被返回(AVG代表 "平均")。
关于Excel中的RANK,你应该知道的4件事
- Excel中的任何等级公式都只对数值起作用:正数和负数、零、日期和时间值。 非数字值在 参考文献 参数被忽略。
- 所有的RANK函数对于重复的值都会返回相同的排名,并跳过后续的排名,如下面的例子所示。
- 在Excel 2010及以后的版本中,RANK函数已被RANK.EQ和RANK.AVG所取代。为了向后兼容,RANK在所有版本的Excel中仍然有效,但在未来可能无法使用。
- 如果 数 内没有找到 参考文献 ,任何Excel等级函数都会返回#N/A错误。
基本的Excel排名公式(从高到低)。
要想对Excel中的数据排名有更多的了解,请看一下这个截图。
这三个公式都将B列中的数字排在了 降序 (该 秩序 论点省略)。
在所有版本的Excel 2003 - 2016中。
=rank($b2,$b$2:$b$7)
在Excel 2010 - 2016中。
=rank.eq($b2,$b$2:$b$7)
=rank.avg($b2,$b$2:$b$7)
区别在于这些公式如何处理重复的数值。 如你所见,同一个分数在单元格B5和B6中出现了两次,这影响了后续的排名。
- RANK和RANK.EQ公式给两个重复的分数的排名都是2。 次高的分数(Daniela)排名第四。 3的排名没有给任何人。
- RANK.AVG公式在幕后为每个副本分配了不同的等级(本例中为2和3),并返回这些等级的平均值(2.5)。 同样,第3个等级没有分配给任何人。
如何在Excel中使用RANK--公式示例
因此,为了更好地学习如何在Excel中单独或与其他函数结合使用RANK函数,让我们来解决几个现实生活中的问题。
如何在Excel中从低到高排序
如上例所示,要将数字从高到低排序,你可以使用Excel排名公式中的一个与 秩序 参数设置为0或省略(默认)。
要有 数 与其他数字相比,排序为 升序 ,在可选的第三个参数中放入1或任何其他非零值。
例如,要对学生的100米短跑时间进行排名,你可以使用以下任一公式。
=rank(b2,$b$2:$b$7,1)
=rank.eq(b2,$b$2:$b$7,1)
请注意,我们将该范围锁定在 参考文献 参数使用绝对的单元格引用,这样,当我们把公式复制到下一列时,它就不会改变。
结果,最低的值(最快的时间)被排在第1位,最大的值(最慢的时间)得到最低的排名6。相同的时间(B2和B7)被赋予相同的排名。
如何在Excel中对数据进行独特的排名
正如前面所指出的,所有的Excel排名函数对于同等价值的项目都返回相同的排名。 如果这不是你想要的,使用以下公式之一来解决平局的情况,并给出一个 独特的等级 到每个数字。
从高到低的独特排名
要将我们的学生的数学分数按降序排列,请使用这个公式。
=rank.eq(b2,$b$2:$b$7)+countif($b$2:b2,b2)-1
从低到高的独特排名
要将100米比赛的结果按升序排列,并且没有重复的,请使用这个公式。
=rank.eq(b2,$b$2:$b$7,1) + countif($b$2:b2,b2)-1
这些公式是如何工作的
正如你可能已经注意到的,两个公式之间的唯一区别是 秩序 RANK.EQ函数的参数:省略是将数值降序排列,1是升序排列。
在这两个公式中,都是COUNTIF函数巧妙地使用了相对和绝对单元格引用,简而言之,你用COUNTIF来找出被排定的数字在上述单元格中的出现次数,包括该数字的单元格。 在你输入公式的最上面一行,范围包括一个单元格($B$2:B2)。 但由于你只锁定了因此,对于第7行,范围扩大到$B$2:B7,B7中的值将与上述每个单元格进行比较。
因此,对于所有第1次出现的情况,COUNTIF返回1;你在公式的最后减去1以恢复原来的等级。
对于第二次出现的情况,COUNTIF返回2。 通过减去1,你的排名增加了1分,从而防止重复。 如果碰巧有3个相同的值出现,COUNTIF()-1将在他们的排名中增加2,以此类推。
打破Excel RANK联系的替代方案
另一种在Excel中对数字进行唯一排序的方法是将两个COUNTIF函数相加。
- 第一个函数确定有多少个值大于或小于要排名的数字,这取决于你是降序排列还是升序排列。
- 第二个函数(与上例中的 "扩展范围"$B$2:B2一样)得到的数值等于数字的数量。
例如,如果要将数字从高到低进行唯一的排名,你会使用这个公式。
=COUNTIF($B$2:$B$7,">"&$B2)+COUNTIF($B$2:B2,B2)
如下面的截图所示,平局被成功解决,并为每个学生分配了一个独特的等级。
在Excel中根据多个标准进行排名
前面的例子已经展示了Excel RANK平局情况下的两种有效解决方案。 然而,仅仅根据他们在列表中的位置,对相同的数字进行不同的排名,这似乎是不公平的。 为了改善你的排名,你可能想增加一个标准,在平局情况下考虑。
在我们的样本数据集中,让我们把C列中的总分相加,并计算出排名,如下所示。
- 首先,排名与 数学得分 (主要标准)
- 当出现平局时,用 总分 (二级标准)
要做到这一点,我们将使用常规的RANK/RANK.EQ公式来寻找排名,并使用COUNTIFS函数来打破平局。
=RANK.EQ($B2,$B$2:$B$7)+COUNTIFS($B$2:$B$7,$B2,$C$2:$C$7, ">"&$C2)
与上面的例子相比,这个排名公式更加客观:Timothy排名第二,因为他的总分比Julia的高。
这个公式如何运作
公式中的RANK部分是显而易见的,COUNTIFS函数的作用如下。
- 第一个 标准_范围 / 标准 对($B$2:$B$7,$B2)计算你要排查的值的出现次数。 请注意,我们把 范围 的绝对引用,但不要锁定 标准 的行($B2),这样公式就会单独检查每一行的值。
- 第二个 标准_范围 / 标准 pair ($C$2:$C$7,">"&$C2)找出有多少个总分大于被排行的值的总分。
因为COUNTIFS是用AND逻辑工作的,也就是说,只计算满足所有指定条件的单元格,所以对Timothy来说,它返回0,因为没有其他数学成绩相同的学生的总分更高。 因此,Timothy由RANK.EQ返回的排名不变。 对Julia来说,COUNTIFS函数返回1,因为有一个数学成绩相同的学生的总分更高,所以她的排名数字为如果再有一个学生的数学成绩相同,但总分低于蒂莫西和朱莉娅,他/她的排名就会增加2,以此类推。
用多种标准对数字进行排名的替代解决方案
你可以使用COUNTIF来检查主要标准,并使用COUNTIFS或SUMPRODUCT来解决平局问题,而不是使用RANK或RANK.EQ函数。
=COUNTIF($B$2:$B$7,">"&$B2)+COUNTIFS($B$2:$B$7,$B2,$C$2:$C$7, "> "&$C2)+1
=COUNTIF($B$2:$B$7,">"&B2)+SUMPRODUCT(--($C$2:$C$7=C2),--($B$2:$B$7>B2))+1
这些公式的结果与上面所示完全相同。
如何在Excel中计算百分位数排名
在统计学中,一个 百分值 (或 百分位数 例如,如果70%的学生等于或低于你的考试分数,你的百分位数排名就是70。
要想在Excel中获得百分位数排名,请使用RANK或RANK.EQ函数,并将非零的 秩序 参数对数字从小到大进行排序,然后用该排序除以数字的数量。 因此,通用的 Excel百分位数排名公式 情况如下。
RANK.EQ( 最上面的单元格 , 范围 ,1)/COUNT( 范围 )为了计算我们的学生的百分位数排名,公式采取以下形式。
=rank.eq(b2,$b$2:$b$7,1)/count($b$2:$b$7)。
为使结果正确显示,请确保将 百分比 格式到公式单元格。
如何对不相邻的单元格中的数字进行排序
在你需要对不相邻的单元格进行排序的情况下,直接在 参考文献 例如,你的Excel等级公式的参数以引用联盟的形式出现,用$符号锁定引用。
=rank(b2,($b$2,$b$4,$b$6))
为了防止非排名单元格的错误,在IFERROR函数中包裹RANK,像这样。
=iferror(rank(b2,($b$2,$b$4,$b$6)), "" )
请注意,虽然单元格B5不包括在公式中,但重复的数字也被赋予一个等级。
如果你需要对多个不相邻的单元格进行排序,上述公式可能会变得太长。 在这种情况下,一个更优雅的解决方案是定义一个命名的区域,并在公式中引用该名称。
=IFERROR(RANK(B2,range), "")
如何在Excel中按组排名
当处理组织成某种数据结构的条目时,数据可能属于不同的组,你可能想对每组中的数字进行单独排名。 Excel的RANK函数不能解决这个难题,所以我们要使用一个更复杂的SUMPRODUCT公式。
按组排名,在 下降 秩序。
=SUMPRODUCT((A2=$A$2:$A$7)*(C2<$C$2:$C$7))+1
按组排名,在 升序 秩序。
=SUMPRODUCT((A2=$A$2:$A$7)*(C2> $C$2:$C$7))+1
在哪里?
- A2:A7是分配给数字的组。
- C2:C7是要排名的数字。
在这个例子中,我们用第一个公式将每组的数字从大到小排列。
这个公式如何运作
基本上,该公式评估了2个条件。
- 首先,你检查组(A2=$A$2:$A$7)。 这一部分根据一个范围元素是否与A2属于同一组,返回一个TRUE和FALSE的数组。
- 第二,你要检查分数。 要把数值从大到小排序( 降序 ),使用条件(C2<$C$2:$C$11),对于大于或等于C2的单元格返回TRUE,否则返回FALSE。
因为在微软的Excel术语中,TRUE=1,FALSE=0,所以将两个数组相乘得到一个1和0的数组,其中只有两个条件都满足的行才会返回1。
然后,SUMPRODUCT将1和0数组中的元素相加,因此每组中最大的数字返回0。 然后你在结果中加上1,从1开始排队。
将组内的数字从小到大排序的公式( 升序 秩序 不同的是,SUMPRODUCT对某组中最小的数字返回0,因为该组中没有数字符合第二条件(C2>$C$2:$C$7)。 同样,你通过在公式结果中添加1来用第一等级取代零等级。
你可以使用SUM函数将数组元素相加,而不是SUMPRODUCT,但是这需要使用数组公式,通过Ctrl + Shift + Enter完成。 例如::
=SUM((A2=$A$2:$A$7)*(C2<$C$2:$C$7))+1
如何对正数和负数分别排序
如果你的数字列表中同时包含正数和负数,Excel的RANK函数会马上对它们进行排名。 但如果你想让正数和负数分别进行排名呢?
对于A2至A10单元格中的数字,使用以下公式之一来获得正值和负值的单独排名。
正数降序排列。
=IF($A2>0,COUNTIF($A$2:$A$10,">"&A2)+1,"")
将正数升序排列。
=IF($A2>0,COUNTIF($A$2:$A$10,">0")-COUNTIF($A$2:$A$10,">"&$A2),""
负数降序排列。
=IF($A2<0,COUNTIF($A$2:$A$10,"<0")-COUNTIF($A$2:$A$10,"<"&$A2),""
负数升序排列。
=IF($A2<0,COUNTIF($A$2:$A$10,"<"&$A2)+1,"")
结果将看起来与此类似。
这些公式是如何工作的
首先,让我们来分析一下正数的排名公式,在 下降 秩序。
- 在IF函数的逻辑测试中,你检查数字是否大于零。
- 如果数字大于0,COUNTIF函数返回比被排行的数字高的数值的数量。
在这个例子中,A2包含第二高的正数,COUNTIF返回1,这意味着只有一个数字比它大。 为了从1而不是0开始排名,我们在公式结果中加上1,所以A2的排名是2。
- 如果数字大于0,该公式返回一个空字符串("")。
对正数进行排序的公式是 升序 顺序的工作方式有点不同。
如果这个数字大于0,第一个COUNTIF得到数据集中正数的总数,第二个COUNTIF找出比这个数字高的数值。 然后,你用后者减去前者,得到想要的等级。 在这个例子中,有5个正数,其中1个大于A2。 所以,你从5中减去1,从而得到A2的等级为4。
对负数进行排序的公式也是基于类似的逻辑。
注意:上述所有公式 忽略零值 因为0既不属于正数集合,也不属于负数集合。 要在你的排名中包括零,在公式逻辑要求的地方分别替换>0和=0以及<=0。
例如,将正数和零从大到小排序,使用这个公式。 =IF($A2>=0,COUNTIF($A$2:$A$10,">"&A2)+1,"")
如何在Excel中忽略零值的数据排名
你已经知道,Excel的RANK公式可以处理所有的数字:正数、负数和零。 但在某些情况下,我们只想对忽略0值的数据的单元格进行排序。 在网上,你可以找到一些可能的解决方案,但Excel的RANK IF公式,我认为是最通用的一种。
数字降序排列,忽略零。
=IF($B2=0,"",IF($B2>0,RANK($B2,$B$2:$B$10), RANK($B2,$B$2:$B$10)-COUNTIF($B$2:$B$10,0))
将数字升序排列,忽略零。
=IF($B2=0,"",IF($B2>0,RANK($B2,$B$2:$B$10,1) - COUNTIF($B$2:$B$10,0), RANK($B2,$B$2:$B$10,1))
其中B2:B10是要进行排名的数字范围。
这个公式最好的一点是,它对正数和负数都能很好地工作,把零值排除在排名之外。
这个公式如何运作
乍一看,这个公式可能有点棘手。 仔细一看,其逻辑非常简单。
下面是Excel RANK IF公式如何将数字从大到小排列,忽略零。
- 第一个IF检查数字是否为0,如果是,则返回一个空字符串。
if($b2=0,"", ...)
- 如果这个数字不是0,第二个IF检查它是否大于0,如果是,一个常规的RANK / RANK.EQ函数计算它的等级。
IF($B2>0,RANK($B2,$B$2:$B$10),...)
- 如果数字小于0,你要通过零数来调整排名。 在这个例子中,有4个正数和2个零。 因此,对于B10中最大的负数,Excel RANK公式会返回7。 但我们跳过了零,因此我们需要调整2个点的排名。 为此,我们从排名中减去零的数量。
rank($b2,$b$2:$b$10)-countif($b$2:$b$10,0))
是的,就这么简单!将数字从小到大排列的公式也是类似的方式,推导其逻辑可能是一个很好的脑力锻炼 :)
如何在Excel中通过绝对值计算排名
当处理一个正负值的列表时,可能需要按照数字的绝对值进行排序,忽略符号。
这个任务可以用下面的一个公式来完成,其核心是ABS函数,它返回一个数字的绝对值。
排名ABS递减。
=SUMPRODUCT((ABS(A2)<=ABS(A$2:A$7)) * (A$2:A$7"")) - SUMPRODUCT((ABS(A2)=ABS($A$2:$A$7)) * (A$2:A$7"") )+1
排名ABS升序。
=SUMPRODUCT((ABS(A2)>=ABS(A$2:A$7)) * (A$2:A$7"")) - SUMPRODUCT((ABS(A2)=ABS($A$2:$A$7)) * (A$2:A$7"") )+1
结果是,负数的排名就像正数一样。
如何获得N个最大或最小的值
如果你希望得到一个实际的N个最大或最小的值,而不是它们的排名,请分别使用LARGE或SMALL函数。
例如,我们可以用这个公式得到学生的前3个分数。
=large($b$2:$b$7, $d3)
其中B2:B7是分数列表,D3是期望的排名。
此外,你可以通过使用INDEX MATCH公式来检索学生的名字(前提是前三名中没有重复的分数)。
=index($a$2:$a$7,match(e3,$b$2:$b$7,0))
同样地,你可以使用SMALL函数来拉出底部的3个值。
=small($b$2:$b$7, $d3)
这就是在Excel中做排名的方法。 为了更好地理解并可能逆向设计本教程中讨论的公式,欢迎下载我们的Excel样本排名工作簿。
我感谢你的阅读,希望下周在我们的博客上看到你!