Google Sheets中统计玩家每行最高分获胜次数的公式求解
Google Sheets 计算玩家每行获胜次数的正确公式
问题根源
你之前用的公式=ARRAYFORMULA(SUM(IF(B2:B4 = MAX(B2:D4), 1, 0)))错误核心在于:MAX(B2:D4)返回的是整个数据区域的最大值(即12),而非对应行的最大值,导致匹配逻辑完全偏离需求。
正确公式方案
以下两种方案均可实现按行判断最高分,并统计每个玩家的获胜次数:
方案1:单列独立公式(新手友好)
直接在对应玩家的“获胜次数”单元格输入公式,以样本数据为例:
- 玩家1(单元格B5):
=ARRAYFORMULA(SUM(IF(B2:B4=MAXIFS(B2:D4,ROW(B2:D4),ROW(B2:B4)),1,0))) - 玩家2(单元格C5):
=ARRAYFORMULA(SUM(IF(C2:C4=MAXIFS(B2:D4,ROW(B2:D4),ROW(C2:C4)),1,0))) - 玩家3(单元格D5):
=ARRAYFORMULA(SUM(IF(D2:D4=MAXIFS(B2:D4,ROW(B2:D4),ROW(D2:D4)),1,0)))
逻辑说明:MAXIFS(B2:D4,ROW(B2:D4),ROW(B2:B4))通过行号匹配,仅计算当前行的最大值,再判断该玩家该行得分是否等于这个最大值,最后统计符合条件的次数。
方案2:一次性计算全列的数组公式(高效简洁)
在单元格B5输入以下公式,会自动填充到C5、D5,直接得到所有玩家的获胜次数:
=ARRAYFORMULA(MMULT(--(B2:D4=BYROW(B2:D4,LAMBDA(row,MAX(row)))),SEQUENCE(ROWS(B2:D4),1,1,0)))
逻辑说明:
BYROW(B2:D4,LAMBDA(row,MAX(row))):遍历每一行,计算该行的最高分--(B2:D4=...):将每个单元格与对应行最高分的比较结果(TRUE/FALSE)转换为1/0MMULT(...):对每列的1求和,得到每个玩家的获胜总次数
验证结果
代入样本数据后,两个方案都会得到:玩家1获胜2次,玩家2获胜0次,玩家3获胜1次,与预期结果一致。
内容的提问来源于stack exchange,提问作者Mike Cooper
相关产品推荐
相关产品推荐

