如何通过excel中的列表循环计算过去3个月的总和?
我在excel中有一个每月1到12的值列表。当季度在12月结束时,应将10月、11月和12月的季度值相加,即10月、11月和12月。当前使用的函数是偏移函数如何通过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月、
=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))