给定一个包含三列(类似于this)的Excel文件:Group,Number和Rank。Excel列中的排名值
在每个组中,他必须将数值从最小到最大排列。如果这些值匹配,他们会得到相同的排名。所以如果一个值最大,那么排名将是1.如果它是第二大的,排名将是2等等。
然后,此过程应重新启动第二组值。这项任务如何完成?也许使用数组/冒泡排序? —但我不确定这是正确的方法。
给定一个包含三列(类似于this)的Excel文件:Group,Number和Rank。Excel列中的排名值
在每个组中,他必须将数值从最小到最大排列。如果这些值匹配,他们会得到相同的排名。所以如果一个值最大,那么排名将是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
(根据您的设置,您可能需要更换分号)
我做了一个自定义排序与排序是该组列的第一级(从小到大)和排序是值列第二级(最大到最小)。然后在排名栏中我使用公式
=IF(B2=B1,C1,COUNTIF($A$2:A2,A2))
其中A2是第一行。然后我一直拖下去。
这给你的排名PLUS一切都在屏幕上视觉排序,因为当你完成。
我刚刚发现的Excel的= RANK()功能。 ..这使得为一个给定的组排序一组数字非常容易...但是我怎样才能自动地继续处理每个其他组的数据? – MonuMan5 2012-07-21 02:42:21
看看这个:http://www.mrexcel.com/forum/showthread.php?343375-Rank-based-on-multiple-columns – codechurn 2012-07-21 02:56:03
我找到了某种答案... = SUMPRODUCT(($ A $ 2:$ B $ 21 = A2)*($ B $ 2:$ B $ 21> B2))+ 1 问题是......它不会计算匹配。对于比赛,它应该将它们排列为第二和第二,然后按照下一个排名排序。所以...排名可能是像1,1,2,3,3,4,5 ......类似的东西。如果这是有道理的 – MonuMan5 2012-07-21 04:14:30