You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel中如何计算恰好5个非零值的移动平均值

Excel中如何计算恰好5个非零值的移动平均值

嘿,这个需求我太懂了!普通的AVERAGEIF确实只能统计区域里所有非零值的平均,但如果要精准凑够5个非零值来计算——遇到0就直接跳过,直到找满5个有效数值——得换个组合函数的思路,我分两种Excel版本给你说:

如果你用的是Office 365/2021(支持动态数组)

这个版本有更简洁的写法,直接用FILTER+TAKE+AVERAGE组合:
假设你的数据在A1:A100区域,公式如下:

=AVERAGE(TAKE(FILTER(A1:A100,A1:A100<>0),5))
  • FILTER(A1:A100,A1:A100<>0):先把区域里所有非零的数值筛选出来,按原顺序排列
  • TAKE(...,5):从筛选结果里取前5个数值
  • AVERAGE(...):对这5个数值计算平均值

要是区域里非零值不足5个,公式会返回#CALC!,可以加IFERROR做容错处理:

=IFERROR(AVERAGE(TAKE(FILTER(A1:A100,A1:A100<>0),5)),"非零值不足5个")

如果你用的是旧版Excel(无动态数组,比如2019及更早)

得用数组公式来实现(输入完公式后要按Ctrl+Shift+Enter确认,不能直接回车):
同样假设数据在A1:A100,公式如下:

=IFERROR(AVERAGE(INDEX(A1:A100,SMALL(IF(A1:A100<>0,ROW(A1:A100)-ROW(A1)+1),ROW(INDIRECT("1:5"))))),"非零值不足5个")

拆解一下逻辑:

  1. IF(A1:A100<>0,ROW(A1:A100)-ROW(A1)+1):找出所有非零值在区域内的相对行号
  2. SMALL(...,ROW(INDIRECT("1:5"))):取前5个非零值的相对行号
  3. INDEX(A1:A100,...):根据行号提取对应的5个非零值
  4. AVERAGE(...):计算这5个值的平均,IFERROR处理不足5个的情况

额外补充:如果要找「最近的5个非零值」(移动平均场景)

要是你的需求是从当前单元格往前找最近的5个非零值(比如滚动计算),Office 365版本可以这么写:
假设当前计算单元格是B10,要从A1:A9里找最近的5个非零值:

=AVERAGE(TAKE(SORT(FILTER(A1:A9,A1:A9<>0),ROW(A1:A9),-1),5))

这里用SORT(...,ROW(A1:A9),-1)把筛选出的非零值按行号倒序排列(最近的在前),再取前5个计算平均。

你可以根据自己的Excel版本和实际数据区域,调整公式里的单元格范围哦~

备注:内容来源于stack exchange,提问作者frenchpress61

火山引擎 最新活动