2016-08-16 65 views
1

我有一個投資回報率比較表是這樣的:排名羣

Month | ROI | 1 | 2 | 3 | 
Jul | A | 1% | 
Jul | B | 3% | 
Jul | C | 2% | 
Jun | A | 4% | 6% | 
Jun | B | 5% | 7% | 
Jun | C | 6% | 8% | 
May | A | 2% | 4% | 7% | 
May | C | 3% | 5% | 6% | 

我想排名每個產品的投資回報率(A,B和C)各月 - 所以只能排在最右邊的給定月份的百分比。

但是範圍需要是動態的,因爲每個產品可能有不同的啓動日期。例如,在五月份沒有產品B.

所以輸出將是:

Month | ROI | 1 | 2 | 3 | Rank 
    Jul | A | 1% | | | 3 
    Jul | B | 3% | | | 1 
    Jul | C | 2% | | | 2 
    Jun | A | 4% | 6% | | 3 
    Jun | B | 5% | 7% | | 2 
    Jun | C | 6% | 8% | | 1 
    May | A | 2% | 4% | 7% | 1 
    May | C | 3% | 5% | 6% | 2 

我想使用索引/匹配功能:

=RANK(INDEX(G3:S3,MATCH(9^99,G3:S3,1)),G3:G5,0) 

但我不確定如何使G3:G5動態。

+0

請參閱[羣內子羣的唯一排名值](http://stackoverflow.com/questions/34935673/unique-rank-value-for-a-subgroup-within-a-group)。使用* 7月,6月,5月等*作爲分組。可以使用[MATCH功能]檢索* 1,2,3等*列(https://support.office.com/zh-cn/article/match-function-0600e189-9f3c-4e4f-98c1-943a0eb427ca )。 – Jeeped

回答

0

我想我設法得到它與排名列下面的公式工作:

=RANK(OFFSET(G3,,SUM(--ISNUMBER(G3:S3))-1), 
     OFFSET(G3,COUNTIF(E3:$E$999,E3)-COUNTIF($E$1:$E$999,E3), 
       SUM(--ISNUMBER(G3:S3))-1,COUNTIF($E$1:$E$999,E3))) 

(假設你的月是E1:E999)。

這樣做是着眼於G3並轉移到使用OFFSET最右邊的非空(ISNUMBER)柱並認爲價值的OFFSET數組,其中一個月的當前行的月相匹配排名。

讓我們掰開第二OFFSET公式(假設我們正在考慮Jul行):

  • 開始在G3
  • 行偏移量:當前行(含)以下的行數爲Jul - 總行數爲Jul行。
  • 列偏移量:包含當前行中的數字的單元格的數量 - 1
  • 高度:總計數爲Jul行。

這是一個數組公式,因此它必須使用Ctrl鍵 + + 輸入輸入。

注意:該公式假定如果月份相同,則最右邊的值在同一列中。這在你給出的例子中是成立的,但我不知道它是否適用於你的全部數據集。如果這不是真的在一般情況下,可以使用第一OFFSET片式

=OFFSET(G3,,SUM(--ISNUMBER(G3:S3))-1) 

來獲取每行中最右邊的號碼,然後做你的排名在該助手列創建一個幫助列。

+0

感謝公式的作品! – woiya

0

使用COUNTIFS function開始一個簡單的分組排序。

=COUNTIFS(A:A, A2, C:C, "<="&C2) 

rank_latest

修改百分比的範圍內捕捉從上一多列使用範圍INDEX該行的最右邊的數與一個近似MATCH

=COUNTIFS(A:A, A2, INDEX(A:F, 0, MATCH(1E+99, A2:F2)), ">="&INDEX(A:F, ROW(2:2), MATCH(1E+99, A2:F2))) 

rank_latest_two

必要向下填充。

+0

既然你已經選擇了你的問題的答案,我希望這將通過[COUNTIFS函數](https://support.office.com/en-us/article/)以升序和降序的順序來說明條件排序。 COUNTIFS功能-53C4DC8E-0E5B-4E32-93DF-9CA5E7DA89ED)。提及它可能爲時已晚,因爲我確信你在兩個提供的公式之間獲得了反向排列順序。 – Jeeped