給定一個包含三列(類似於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