我有一个包含3列的简单表格:
[姓名] [分数] [等级]
对于第3栏,我使用以下公式根据得分对每一行进行排名:
=RANK(C9,$C$9:$C$28,0)
问题是该公式没有返回我期望的值。例如,在最后一行,当它应为5时返回19。
我找到了其他排名公式(RANK.EQ等),但同样的问题发生了。
以下是Google Sheet,可在上下文中查看:
https://docs.google.com/spreadsheets/d/1P1m7UHPPIcQLQkzpnk-SI1y7-0mhKytCWDjA6FJzFrM/edit?usp=sharing
任何指导意见
答案 0 :(得分:2)
您可以使用简单的MATCH公式实现您想要的结果:
=match(round(C9,0),NamedRange1,0)
提供了一个数组(上面名为NamedRange1),例如:
=sort(unique(round(C9:C28,0)),1,0)
答案 1 :(得分:1)
我认为结果符合预期。查看此Ranking维基百科页面(称为'标准比赛排名')。它说:
标准比赛排名(" 1224"排名)
在比赛排名中,比较相等的项目会相同 排名数字,然后在排名数字中留下差距。该 在这个差距中遗漏的排名数量少一个 比相等的项目数量。等价地,每个 item的排名是1加上排名高于它的项目数。 这种排名策略经常被用于竞赛,因为它 意味着如果两个(或更多)竞争者在一个位置上占据一席之地 排名,排名低于他们的所有人的位置不受影响 (即,只有一个人得分,竞争者才会获得第二名 比他们好,第三,如果恰好有两个人得分比他们好, 第四,如果恰好三个人的得分比他们好,等等。)。
因此,如果A排在B和C之前(比较相等),则两者都是 排在D之前,然后A得到排名第1("第一个"),B得到 排名第2("联合第二"),C也排名第2 ("联合第二")和D获得排名第4("第四")。
你想要的是密集排名'它可以通过 pnuts 的答案或类似的东西来实现:
G9
设为1
G10
设为=if(round(C10,0)<round(C9,0), G9+1, G9)
G10
并将其粘贴到G11:G28
样本表为here。
答案 2 :(得分:0)
感谢@pnuts和@sangboklee提供的解决方案。我想我现在有一个很好的解决方案。这是pnuts的解决方案,只是简化了:
=match(round($C9,0),sort(unique(round($C$9:$C$28,0)),1,false),0)
这基本上将创建的数组“嵌入”在单个公式中,可以应用于所有行。作为奖励,甚至不需要对值进行排序。
请检查正确的人,但我认为这是有效的。我已经从原始问题描述中更新了链接的Google表格(它是“解决方案2b”)。