排列与另一列的特定值匹配的列的子集

我试图根据块状况进行排名,我不希望它对所有其他事物进行排名,而只是对比赛进行阻挡。

例如:

ABCD **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函数,似乎没有什么我正在寻找。

RANK函数对通常用于将标准应用于标准函数的标准数组公式排除方法没有很好的响应。

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

rankif

D2中的公式是,

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

根据需要填写。

这些结果与您的样本不同,因为SRV2,4k,180由于重复的SRV1,4k,200值而排在第4 而不是 3位。

但是,如果重复次数从排名指数中扣除,则必须调整重复次数之后的任何值,以便人为地提高其等级号。

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个。


¹RANKfunction在很大程度上被XL2010以来的RANK.EQ和RANK.AVGfunction取代。