给定一个包含三列的 Excel 文件(类似于此):Group、Number 和 Rank。
在每个组中,他必须将值从最小到最大排列。如果值匹配,它们将获得相同的排名。因此,如果一个值最大,则排名为 1。如果它是第二大的,则排名为 2,依此类推。
然后这个过程应该为第二组值重新启动。如何完成这项任务?也许使用数组/冒泡排序? - 但我不确定这是正确的方法。
我想我有你正在寻找的解决方案——不过我必须分三栏来做。
假设您有 A 列中的组和 B 卷中的分数;您将要先按组排序,然后按分数排序。
然后您将要继续将前面提到的公式放在 C2 列中:
=SUMPRODUCT(($A$2:$B$25=A2)*($B$2:$B$25>B2))+1
然后自动填充。
然后你要在单元格 D2 中放置一个计数器:
=IF(COUNTIFS($A$2:A2,A2,$B$2:B2,B2)=1,0,1)
然后自动填充。
然后你会想把这个方程放在单元格 E2 中:
=IF(C2<>C1,C2-SUMIF($A$2:A2,A2,$D$2:$D$25),C2)
然后自动填充。
可能有更简单/更好的方法来做到这一点 - 但这肯定会给你你正在寻找的东西:
我用一个额外的专栏解决了你的问题:
在“C”列中,您必须使用此公式(假设值从第 2 行到第 10 行)得到给定组中数字频率的倒数:
=1/SUM(IF(($A$2:$A$10=A2)*($B$2:$B$10=B2);1;0))
然后在下一列 (D) 中,您可以通过对 C 中的值求和来获得所需的排名:
=SUM(IF(($B$2:$B$10>B2)*($A$2:$A$10=A2);$C$2:$C$10;0))+1
这两个公式都是数组公式(公式?),在 Excel 中输入时需要按 Shift+Ctrl+Enter。
如果您将数据格式化为表格,则可以使用(在 Excel 2010 中)以下公式:
=1/SUM(IF(([Group]=[@Group])*([Number]=[@Number]);1;0))
=SUM(IF(([Number]>[@Number])*([Group]=[@Group]);[Freq];0))+1
(根据您的设置,您可能需要用逗号替换分号。)
(刚刚注意到您的评论,但已经写了以下内容,所以也可以上传它,因为它可能对这个问题的未来观众有用)
=SUMPRODUCT(($A$2:$A$18=A2)*($B$2:$B$18>B2))+1
.
我做了一个自定义排序,第一级排序是组列(从小到大),第二级排序是值列(从大到小)。然后在排名列中我使用了公式
=IF(B2=B1,C1,COUNTIF($A$2:A2,A2))
其中 A2 是第一行。然后我把它一直拖下来。
这为您提供排名 PLUS 一切都在屏幕上进行视觉排序,就像您完成时一样。