2016-08-16 15 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