Excel RANK函数和其他计算排名的方法

  • Share This
Michael Brown

该教程解释了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件事

    1. Excel中的任何等级公式都只对数值起作用:正数和负数、零、日期和时间值。 非数字值在 参考文献 参数被忽略。
    2. 所有的RANK函数对于重复的值都会返回相同的排名,并跳过后续的排名,如下面的例子所示。
    3. 在Excel 2010及以后的版本中,RANK函数已被RANK.EQ和RANK.AVG所取代。为了向后兼容,RANK在所有版本的Excel中仍然有效,但在未来可能无法使用。
    4. 如果 内没有找到 参考文献 ,任何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样本排名工作簿。

    我感谢你的阅读,希望下周在我们的博客上看到你!

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.