在Excel列中对值进行排名

时间:2012-07-21 02:31:17

标签: excel excel-vba vba

给定一个包含三列(类似于this)的Excel文件:Group,Number和Rank。

在每组中,他必须将值从最小到最大排列。如果值匹配,则获得相同的排名。因此,如果一个值是最大的,那么等级将是1.如果它是第二大的,则等级将是2,依此类推。

然后,此过程应重新启动第二组值。如何完成这项任务?也许使用数组/冒泡排序?但我不确定这是正确的方法。

4 个答案:

答案 0 :(得分:1)

我想我有你想要的解决方案 - 我必须在三列中完成它。

假设您在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)

然后自动填充。

可能有一种更简单/更好的方法可以做到这一点 - 但这肯定能满足您的需求:

Ranking Solution

答案 1 :(得分:0)

我用一个额外的列解决了你的问题:

在“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。

Formatted as a table

如果将数据格式化为表格,则可以使用(在Excel 2010中)以下公式:

=1/SUM(IF(([Group]=[@Group])*([Number]=[@Number]);1;0))
=SUM(IF(([Number]>[@Number])*([Group]=[@Group]);[Freq];0))+1

(根据您的设置,您可能必须用逗号替换分号。)

答案 2 :(得分:0)

(刚刚注意到你的评论,但已经写了以下内容,所以也可以上传它,因为它可能对此问题的未来观众有用)

=SUMPRODUCT(($A$2:$A$18=A2)*($B$2:$B$18>B2))+1

enter image description here

答案 3 :(得分:0)

我做了一个自定义排序,第一级排序是组列(从最小到最大),第二级排序是值列(从最大到最小)。然后在排名栏中我使用了公式

=IF(B2=B1,C1,COUNTIF($A$2:A2,A2))

其中A2是第一行。然后我把它一直拖下来。

这为您提供等级PLUS一切都在屏幕上以视觉方式排序,就像您完成时一样。