求动态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))
公式拆解:
MATCH(TRUE, B2:M2>0, 0):找到第一个大于0的单元格在B2:M2中的相对列位置LOOKUP(2,1/(B2:M2>0),COLUMN(B2:M2)):找到最后一个大于0的单元格的绝对列号,再减去COLUMN(B2)+1转成相对列位置- 两个
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
相关产品推荐
相关产品推荐

