如何在忽略空白单元格的前提下统计指定日期前的球队积分?
谷歌表格实现指定日期前球队最近6场有效比赛积分统计
需求回顾
在单元格C1输入任意日期后,统计C2:C25区域各球队在该日期之前的最近6场非空白比赛积分(胜3分、平1分、负0分),结果整理到第28行开始的表格中。
解决方案
使用BYROW+FILTER+SORT的组合公式,可批量处理所有球队,同时自动忽略空白结果的比赛。
批量统计公式(适用于第28行开始的积分列)
假设:
- 原始比赛数据范围为
A2:D(A=日期,B=球队,D=比赛结果) - 第28行开始的球队列是
B28:B51(对应C2:C25的球队)
在C28单元格输入以下公式:
=ARRAYFORMULA(BYROW(B28:B51, LAMBDA(team, IF(team="", "", SUM(ARRAYFORMULA(IF(INDEX(SORT(FILTER($A$2:$D, $B$2:$B=team, $A$2:$A<$C$1, $D$2:$D<>""), 1, FALSE), SEQUENCE(MIN(6, COUNTA(FILTER($A$2:$A, $B$2:$B=team, $A$2:$A<$C$1, $D$2:$D<>"")))), 4)="胜", 3, IF(INDEX(SORT(FILTER($A$2:$D, $B$2:$B=team, $A$2:$A<$C$1, $D$2:$D<>""), 1, FALSE), SEQUENCE(MIN(6, COUNTA(FILTER($A$2:$A, $B$2:$B=team, $A$2:$A<$C$1, $D$2:$D<>"")))), 4)="平", 1, 0)))) )))
公式拆解
BYROW(B28:B51, LAMBDA(team, ...)):遍历第28行开始的每个球队单元格,逐个计算积分。FILTER($A$2:$D, $B$2:$B=team, $A$2:$A<$C$1, $D$2:$D<>""):筛选当前球队在C1指定日期前、比赛结果非空白的有效场次。SORT(..., 1, FALSE):将有效场次按日期倒序排列,确保最近的比赛排在最前面。SEQUENCE(MIN(6, 有效比赛数)):生成1到6的序列(若球队有效场次不足6场,则取实际场数),避免索引超出范围。INDEX(..., 4):提取每场比赛的结果(此处假设结果在D列,可根据实际表格调整列号)。IF(结果="胜",3,IF(结果="平",1,0)):将比赛结果转换为对应积分,负场自动计0分。SUM(...):对最近6场(或所有有效场次)的积分求和,得到最终结果。
注意事项
- 确保原始数据的日期列(A列)和C1单元格均为日期格式,否则日期筛选会失效。
- 根据实际表格结构调整公式中的列范围(如
$A$2:$D、$B$2:$B、$D$2:$D)。 - 若球队有效比赛不足6场,公式会自动统计所有已有场次的积分。
内容的提问来源于stack exchange,提问作者Andy Affo Forward
相关产品推荐
相关产品推荐

