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

求动态AverageIFS公式:计算首尾正数区间内含零的平均值

求动态AverageIFS公式:计算首尾正数区间内含零的平均值

嗨,我来帮你搞定这个动态平均值的问题!你想要的是从第一个正数开始,到最后一个正数结束,包含中间所有零在内的区间平均值,用普通的AVERAGEIFS确实搞不定——因为它只会筛选符合条件的单元格,而你需要的是锁定一个连续区间后计算所有值的平均,包括中间的零。

核心思路

我们需要先定位两个关键位置:

  • 第一个正数所在的单元格
  • 最后一个正数所在的单元格
    然后用这两个位置圈定区间,再计算整个区间的平均值。

适用于所有Excel版本的公式

假设你的数据在一行(比如B2:M2,对应Dec-21到Nov-22的数值),可以用这个公式:

=AVERAGE(INDEX(B2:M2,,MATCH(TRUE,B2:M2>0,0)):INDEX(B2:M2,,LOOKUP(2,1/(B2:M2>0),COLUMN(B2:M2))-COLUMN(B2)+1))

公式拆解:

  1. MATCH(TRUE, B2:M2>0, 0):找到第一个大于0的单元格在B2:M2中的相对列位置
  2. LOOKUP(2,1/(B2:M2>0),COLUMN(B2:M2)):找到最后一个大于0的单元格的绝对列号,再减去COLUMN(B2)+1转成相对列位置
  3. 两个INDEX分别定位首尾单元格,中间用冒号连接形成连续区间,最后用AVERAGE计算整个区间的平均值(自动包含中间的零)

适用于Excel 365/2021的简化写法

如果用的是支持动态数组的新版本Excel,可以用XMATCH更直观地实现:

=AVERAGE(FILTER(B2:M2,(COLUMN(B2:M2)>=XMATCH(TRUE,B2:M2>0))*(COLUMN(B2:M2)<=XMATCH(TRUE,B2:M2>0,,-1))))

这里XMATCH(TRUE,B2:M2>0,,-1)表示从后往前找第一个正数的位置,也就是最后一个正数的位置,再用FILTER筛选出首尾之间的所有单元格,最后计算平均。

为什么AVERAGEIFS不适用?

AVERAGEIFS的逻辑是筛选所有满足条件的单元格,它会跳过零和负数,只计算正数的平均值。但你的需求是保留首尾正数之间的所有值(包括零),所以它不符合你的场景——我们的方法是先锁定区间,再计算整个区间的平均,这才是你需要的逻辑。

用你给出的例子测试,这个公式会自动锁定Dec-21到Jul-22的区间,计算包含零在内的所有值的平均,得到你想要的1.375。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:58:10