对与另一列的特定值匹配的列的子集进行排名

时间:2015-11-24 22:03:13

标签: excel excel-formula

我正在尝试根据blocksize条件进行排名,我不希望它将所有内容排在其他所有内容之外,只是匹配匹配的块。

例如:

  A             B            C         D
**Server     Block Size    Score      Rank** 
 SRV1          4k            200       2
 SRV1          4k            200       2
 SRV1          8k            100       5
 SRV1          8k            120       4
 SRV2          4k            180       3
 SRV2          4k            130       5
 SRV2          8k            200       3
 SRV3          4k            140       4
 SRV3          4k            220       1
 SRV3          8k            300       2
 SRV3          8k            500       1

我已经尝试过COUNTIF函数和SMALL函数,似乎什么也没做我想要的。

1 个答案:

答案 0 :(得分:2)

RANK function对通常用于将标准应用于标准函数的标准数组公式排除方法反应不佳。

基本上,RANK可以表示为COUNTIF function,如=COUNTIF(A:A, ">"&A1)+1。通过更改为COUNTIFS function可以轻松添加其他条件。

rankif

D2中的公式是,

=COUNTIFS(B$2:B$12, B2, C$2:C$12, ">"&C2)+1

根据需要填写。

这些结果与您的样本的不同之处在于SRV2,4k,180由于重复的SRV1,4k,200值而排名为4 th 而不是3 rd

但是,如果要从排名索引中打印重复项,则必须根据重复项之后的任何值调整重复项,以便人为地提高其RANK编号。

RankIf_w_duplicates

D2中的公式现在有点复杂了,

=SUMPRODUCT(((B$2:B$12=B2)*(C$2:C$12>=C2))/(COUNTIFS(B$2:B$12, B2, C$2:C$12, C$2:C$12&"")+(B$2:B$12<>B2)))

根据需要填写。请注意,SRV2,4k,180的调整后排名现在为3 rd

¹ RANK函数已大致取代自XL2010以来可用的RANK.EQRANK.AVG函数。