Google Sheets中含COUNTIF的RANK.EQ公式无法用ARRAYFORMULA实现求解
Google Sheets 数组化不重复排名公式解决方案
原手动公式=RANK.EQ(I3;$I$3:$I;0)+COUNTIF($I$3:I3;I3)-1能实现降序且无重复的排名(平局时依次递增),但直接嵌套ARRAYFORMULA失效,原因是COUNTIF($I$3:I3;I3)的动态范围无法被数组公式自动识别并逐行扩展。以下是两种可行的数组化方案:
方案一:使用BYROW(推荐,新版Google Sheets支持)
利用BYROW遍历每行数据,完美复刻原公式的逐行逻辑:
=BYROW(I3:I, LAMBDA(x, RANK.EQ(x, I3:I, 0) + COUNTIF(I3:INDEX(I3:I, ROW(x)-ROW(I3)+1), x) - 1))
BYROW(I3:I, LAMBDA(x, ...)):遍历I3到最后一行的每个值xROW(x)-ROW(I3)+1:计算当前值在I3:I区域内的行偏移量INDEX(I3:I, 偏移量):生成从I3到当前行的动态范围,替代原公式的$I$3:I3- 整体逻辑和手动拖拽的公式完全一致,自动填充所有行的排名
方案二:使用ARRAYFORMULA+SUMPRODUCT(兼容旧版)
通过矩阵运算模拟逐行的COUNTIF统计:
=ARRAYFORMULA(IF(I3:I="", "", RANK.EQ(I3:I, I3:I, 0) + SUMPRODUCT(--(I3:I=TRANSPOSE(I3:I)), --(ROW(I3:I)<=TRANSPOSE(ROW(I3:I)))) - 1))
TRANSPOSE(I3:I):将I列数据转置为行,构建对比矩阵--(I3:I=TRANSPOSE(I3:I)):标记矩阵中值相等的位置--(ROW(I3:I)<=TRANSPOSE(ROW(I3:I))):标记当前行及以上的位置SUMPRODUCT(...):对每行求和,得到原COUNTIF($I$3:I3;I3)的结果IF(I3:I="", "", ...):跳过空行,避免生成错误值
内容的提问来源于stack exchange,提问作者alsanmph
相关产品推荐
相关产品推荐

