You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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到最后一行的每个值x
  • ROW(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:10:39