在Excel中使用多个标准进行排名

在Excel中使用多个标准进行排名,excel,excel-formula,Excel,Excel Formula,例如,我需要根据总分(列C),然后根据数学的高分(列B)创建一份少数学生的成绩表 在D列中给出了预期的绩效职位 我可以使用RANK函数,但我只能对一列(总数)使用该函数。若多个学生的总数相等,我找不到任何解决方案 您可以在D1中尝试此选项 =COUNTIF($C$1:$C$99,">"&C1)+1+SUMPRODUCT(--($C$1:$C$99=C1),--($B$1:$B$99>B1)) 然后复制/填写。 让我知道这是否有帮助 解释 第一个标准位于列C,第二个标准位于列

例如,我需要根据总分(列
C
),然后根据数学的高分(列
B
)创建一份少数学生的成绩表

D列中给出了预期的绩效职位


我可以使用
RANK
函数,但我只能对一列(总数)使用该函数。若多个学生的总数相等,我找不到任何解决方案

您可以在D1中尝试此选项

=COUNTIF($C$1:$C$99,">"&C1)+1+SUMPRODUCT(--($C$1:$C$99=C1),--($B$1:$B$99>B1))
然后复制/填写。 让我知道这是否有帮助

解释 第一个标准位于列C,第二个标准位于列B。 基本上,首先它是计算比条目本身更大的条目的数量($C$1:$C$99)($C1))。对于排名中的第一个,您将获得,因此您需要将1添加到每个结果(+1)。 在此之前,如果你有两次相同的值,你将得到重复的排名
因此,您需要添加另一个参数,以便根据第二个条件执行一些额外的计算:
要解决平局的情况,需要使用两个数组公式并将结果添加到上一个参数中,目标是找到与此项相同的项数,即$C$1:$C$99=C1,并且在第二个条件列$B$1:$B$99>B1

添加--以将
TRUE
转换为01以便可以将它们相乘:
SUMPRODUCT(--($C$1:$C$99=C1),-($B$1:$B$99>B1))

第一个数组是查看在第一个条件中有多少个关系。第二个数组是查找比条目本身大的值的数量

注意您可以向列中添加任意多的条目,但请记住更新公式中的范围,当前它设置为99,您可以将其扩展到任意多行。

有时,辅助列将提供快速高效的计算解决方案。将数学分数作为小数点添加到总分数中,将产生一个根据您的标准排序的数字。在右侧未使用的列中,使用第2行中的公式

=C2+B2/1000

根据需要填写。现在,您可以在此帮助器列上使用常规的排序规则,如
=RANK(D2,D$2:D$9)

如果您不想限制行数或条件中使用的数字,可以进行扩展。假设有三个条件,第一个在A列,第二个在B列,第三个在C列,则可以在D2到L2单元格中使用以下公式:

=RANK($A2,$A:$A,1)
=RANK($B2,$B:$B,1)
=D2*2^27+E2
=RANK(F2,F:F,1)
=RANK($C2,$C:$C,1)
=G2*2^27+H2
=RANK(I2,I:I,1)
=J2*2^27-ROW()
=RANK(K2,K:K,0)
这些公式必须抄下来。结果显示在L列中。使用行号断开连接

如果要添加第四个标准,可以在使用上述公式后执行以下操作:

  • 在C列和D列之间添加新标准
  • 在I列和J列之间插入三个新列
  • 将列G:I复制到新列J:L
  • 将G列复制到M列,覆盖其内容
  • 将L列中的公式更改为指向新标准
  • 公式中使用的系数
    2^27
    平衡了中可用的53位精度。这足以覆盖当前版本Excel的行限制。

    非常简单(或者至少比最佳答案提供的简单得多)“数学”解决方案:使用权重进行线性组合。 做点像

    weighted_marks = 10*colC + colB
    
    然后使用简单的秩函数对加权标记进行排序


    它确实解决了您的问题,建立了您需要的排名。

    如果C列和B列的值都相同怎么办?它工作正常。非常感谢……:)如果你能简单描述一下算法,那就太好了。如果我想添加另一个主题的编号,公式是什么?如果我只添加两列并应用秩函数,它会给出预期的结果。为什么要把B2除以1000?这和直接添加B2(D2=C2+B2)有什么区别。如果我需要添加另一个主题怎么办?简单地添加两列在某些情况下会产生正确的结果,而不是在所有情况下。您希望Total列具有最高优先级(也称主键),并且数学分数只能用作平局中的辅助键。什么是学生4,数学成绩95分,总共210分?这将使他/她排名高于学生1,这与我对你的标准的解释相矛盾。如果你需要另一个科目,请将第三个关键点作为一个较小的分数添加到之前的总数中,这不会影响第二个关键点作为决定标准的作用。你教数学吗?
    weighted_marks = 10*colC + colB