如何通过excel中的列表循环计算过去3个月的总和?

如何通过excel中的列表循环计算过去3个月的总和?,excel,vba,Excel,Vba,我在excel中有一个每月1到12的值列表。当季度在12月结束时,应将10月、11月和12月的季度值相加,即10月、11月和12月。当前使用的函数是偏移函数 =SUM(补偿(指数($999:$1008,匹配(月($B1013),$E$999:$E$1008)),0,0,-3,1))。当起始位置为3月、6月、9月和12月时,该公式运行良好。但是,假设季度结束月份为1月。然后使用上述函数将仅对1月的值进行求和,因为在上述函数中,2个月前没有值 预期结果:如果季度在1月结束,则应循环列表,并对11月、

我在excel中有一个每月1到12的值列表。当季度在12月结束时,应将10月、11月和12月的季度值相加,即10月、11月和12月。当前使用的函数是偏移函数
=SUM(补偿(指数($999:$1008,匹配(月($B1013),$E$999:$E$1008)),0,0,-3,1))
。当起始位置为3月、6月、9月和12月时,该公式运行良好。但是,假设季度结束月份为1月。然后使用上述函数将仅对1月的值进行求和,因为在上述函数中,2个月前没有值

预期结果:如果季度在1月结束,则应循环列表,并对11月、12月和1月进行求和。目标是执行敏感性分析,因为季度结束月份可以是任何月份,并根据季度结束月份汇总该季度的所有值

列表如下所示,因此如果该季度在2月结束,则其总和应为(12月)10%+(1月)3%+(2月)6%=19%


技巧是生成与所需月份匹配的数字序列

请注意,在表中,月数=表中的索引

将生成所需序列的公式,例如,如果您将季度结束月份设置为1月(例如月号1)=>
{11,12,1}
,则

  Office 365:  =SUM(INDEX(monthly,MOD(SEQUENCE(3, ,F2+12-2)-1,12)+1,3))
  
  older versions:  =MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3))+F2+12-4,12)+1
其中
F2
包含结束季度的月数

因此,对于O365:

=SUM(INDEX(monthly,MOD(SEQUENCE(3, ,F2+12-2)-1,12)+1,3))

  or      :  =SUM(XLOOKUP(MOD(SEQUENCE(3, ,F2+12-2)-1,12)+1,monthly[monthNum],monthly[perCent]))
其中
monthly
是您的表名

对于早期版本,请尝试:

=SUM(INDEX(monthly,MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3))+F2+12-4,12)+1,3))
甚至:

=SUM(INDEX(monthly,N(IF(1,MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3))+F2+12-4,12)))+1,3))

在某些早期版本的Excel中,您可能需要在按住ctrl+shift键的同时按enter键来“确认”此数组公式。如果操作正确,Excel将在公式栏中观察到的公式周围放置大括号
{…}

什么版本的Excel?
=SUM(INDEX(monthly,N(IF(1,MOD(ROW(INDEX($A:$A,1):INDEX($A:$A,3))+F2+12-4,12)))+1,3))