关于在超100单元格区域中计算前12个有效高尔夫成绩平均值的技术咨询
关于在超100单元格区域中计算前12个有效高尔夫成绩平均值的技术咨询
嗨,Curtis!我完全懂你统计高尔夫成绩时的痛点——毕竟不是每个人都能打满100轮,你只需要聚焦在已完成的轮次里,算出最近12次(或者指定的前12个有效成绩)的平均值对吧?下面给你适配不同Excel版本的实用解决方案,直接复制公式就能用:
适用Excel 365/2021(支持动态数组函数)
假设你的高尔夫成绩都存在A1:A100这个区域里:
如果要算最近12次已打轮次的平均值(A1是最早成绩,A100是最近成绩):
用这个公式:=AVERAGE(TAKE(FILTER(A1:A100, A1:A100<>""), -12))拆解一下逻辑:
FILTER(A1:A100, A1:A100<>"")先把区域里所有非空的有效成绩筛选出来,自动跳过没打球的空单元格TAKE(..., -12)从筛选结果的末尾(也就是最新的12次成绩)提取12个值- 最后用
AVERAGE计算这些值的平均数
如果要算区域里从上到下的前12个有效成绩的平均值(比如最早的12轮):
只需要把-12改成12:=AVERAGE(TAKE(FILTER(A1:A100, A1:A100<>""), 12))
适用旧版Excel(不支持动态数组)
旧版没有FILTER和TAKE函数,咱们用组合公式来实现:
同样假设成绩在A1:A100(A100是最近成绩):
=AVERAGE(OFFSET(A100, -MIN(12, COUNTA(A1:A100)-1), 0, MIN(12, COUNTA(A1:A100)), 1))
解释下:
COUNTA(A1:A100)先统计区域里有多少个非空的有效成绩MIN(12, COUNTA(...))做个兜底:如果总轮次不足12次,就自动取所有已有的轮次来算平均,不会出错OFFSET精准定位到最近的12个(或全部)有效成绩的区域,最后用AVERAGE计算平均值
小提示
如果你的成绩区域里有0值:
- 如果
0是有效成绩,那上面的公式都能直接用 - 如果
0代表没打球需要排除,把筛选条件改成A1:A100>0就行,比如把第一个公式改成=AVERAGE(TAKE(FILTER(A1:A100, A1:A100>0), -12))
备注:内容来源于stack exchange,提问作者Curtis Munson
相关产品推荐
相关产品推荐

