在Excel中用多个条件进行排名
例如,我需要根据总分( C
列)创buildlessmath生的成绩单,然后在math中列出更高的分数( B
列)。
ABCD ------------------------- Student1 80 220 1 Student2 88 180 3 Student3 90 180 2
预期的优点在D
栏中给出。
我可以使用RANK
函数,但我只能做一列(总数)。 如果多个学生的总数相等,我找不到任何解决办法。
你可以在D1试试这个
=COUNTIF($C$1:$C$99,">"&C1)+1+SUMPRODUCT(--($C$1:$C$99=C1),--($B$1:$B$99>B1))
然后复制/填写。 让我知道这是否有帮助。
说明
您的第一个标准位于C列 ,第二个标准位于B列 。 基本上,首先是计入比条目本身($ C1)大的条目数($ C $ 1:$ C $ 99 ) 。 对于排名中的第一个,您将得到零 ,因此您需要为每个结果(+1)加1 。 在此之前,如果您有两次相同的值,您将获得重复的排名。
因此,您需要添加另一个参数,根据第二个标准进行一些额外的计算:
为了解决这种情况,你需要sumproduct
两个数组公式,并将结果添加到前一个参数中,目标是find与$ C $ 1:$ C $ 99 = C1相同的条目数,并且有一个第二个标准列中的值更大$ B $ 1:$ B $ 99> B1 :
您添加–将TRUE
和FALSE
转换为0 s和1 s,以便您可以将它们相乘:
SUMPRODUCT(--($C$1:$C$99=C1),--($B$1:$B$99>B1))
第一个数组是看你在第一个标准中有多less关系。 第二个数组是查找比条目本身更大的数值。
请注意,您可以随意添加多个条目到列中,但请记住要更新公式中的范围,当前设置为99 ,可以将其扩展到任意数量的行。
有时候,一个帮助栏将提供一个快速而有效的解决scheme。 将math符号添加到总分数应该产生一个数字,将根据您的标准排名。 在右边未使用的列中,使用第2行中的此公式,
=C2+B2/1000
根据需要填写。 你现在可以在这个帮助列上使用传统的RANK函数 ,比如=RANK(D2, D$2:D$9)
。
非常简单(或者,至less比由最好的答案提供的那个简单得多)'math'解决scheme:与权重进行线性组合。 做类似的事情
weighted_marks = 10*colC + colB
然后使用简单的等级函数对加权标记进行分类
它确实解决了你的问题,build立你需要的排名。
如果您不想限制标准中使用的行数或数字, Jeeped的方法可以扩展。 您可以在单元格D2到L2中使用以下公式,假设有三个条件,第一个在列A中,第二个在列B中,第三个列C中:
=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的行限制。