Excel: 不为零但需要停止到今天的动态总和偏移量

Excel: Dynamic Sum offset when not zero but needs to stop until today

当达到像今天这样的某个月份时,我正在努力如何限制我的公式的范围。在我的公式中,它继续总结今天几个月后的下四个月。正如在我的例子中,我想总结零之后的前 4 个月,但只是直到今天的月份。如果不到 4 个月,假设到今天的月份还剩下 3 个月,那么它应该只添加剩余的三个月。 我需要限制宽度,但它应该总是四个,只有当它小于当前月份时它应该小于四个月。

Jan Feb Mar Apr Jun Jul Aug Oct Nov Dec
0 0 2 3 4 5 6 7 2 3 ---> 1st period= 14 2nd period= 13
0 0 0 0 0 0 2 1 4 2 ---> 1st period= 3 2nd Period= 0

下图效果更佳

例如

前四个月:

=IFERROR(SUM(OFFSET(INDIRECT(CELL("address",
INDEX(A2:N2,MATCH(TRUE,INDEX(A2:N2<>0,),0)))),0.0.1.4))," ")

后四个月:

=IFERROR(SUM(OFFSET(INDIRECT(CELL("address",
INDEX(A2:N2,MATCH(TRUE,INDEX(A2:N2<>0,),0)))),0.0.1.8))
-SUM(OFFSET(INDIRECT(CELL("address",
INDEX(A2:N2,MATCH(TRUE,INDEX(A2:N2<>0,),0)))),0.0.1.4))," ")

这两个公式都超出当前月份并捕获所有超出的日期,如 11 月、12 月等,我不知道如何将它保持在 4 个月,只有在剩余月份少于 4 个月时才调整它

非常感谢您的帮助!

对于第一行的第一个句点,使用:

=SUMPRODUCT($A2:$L2*(COLUMN($A2:$L2)>=AGGREGATE(15,6,COLUMN($A2:$L2)/($A2:$L2>0),1)+4*(COLUMN(A2)-1))*(COLUMN($A2:$L2)<AGGREGATE(15,6,COLUMN($A2:$L2)/($A2:$L2>0),1)+4*(COLUMN(A2)))*($A:$L<TODAY()))

并向右下方复制

如果第一行包含实际格式化的日期而不是文本,则公式将起作用


第一行第一个时期的解释:

  1. $A2:$L2 returns 给定范围内的值数组:

    {0,0,1,3,4,6,5,5,5,10,4,3}

  2. AGGREGATE(15,6,COLUMN($A2:$L2)/($A2:$L2>0),1) returns 大于0的最小列号:

    3

  3. 4*(COLUMN(A2)-1) 变为 4*(1-1) 和 returns:

    0

  4. 所以表达式 AGGREGATE(15,6,COLUMN($A2:$L2)/($A2:$L2>0),1)+4*(COLUMN(A2)-1) 变成 3+0 和 returns:

    3

  5. 比较 COLUMN($A2:$L2)>=AGGREGATE(15,6,COLUMN($A2:$L2)/($A2:$L2>0),1)+4*(COLUMN(A2)-1) 变为 {1,2,3,4,5,6,7,8,9,10,11,12}>=3 和 returns 布尔数组:

    {F,F,T,T,T,T,T,T,T,T,T,T,T}

  6. 类比第二个表达式 COLUMN($A2:$L2)<AGGREGATE(15,6,COLUMN($A2:$L2)/($A2:$L2>0),1)+4*(COLUMN(A2)) 变为 {1,2,3,4,5,6,7,8,9,10,11,12}<7 和 returns:

    {T,T,T,T,T,T,F,F,F,F,F,F}

  7. 第三个表达式 $A:$L<TODAY() 将第一行中的日期与今天的日期进行比较,10 月 27 日将 return:

    {T,T,T,T,T,T,T,T,T,T,F,F}

  8. 所以最后的表达式我们得到 {0,0,1,3,4,6,5,5,5,10,4,3}*{F,F,T,T,T,T,T,T,T,T,T,T,T}*{T,T,T,T,T,T,F,F,F,F,F,F}*{T,T,T,T,T,T,T,T,T,T,F,F} 结果为:

    {0,0,1,3,4,6,0,0,0,0,0,0}

  9. 从中SUMPRODUCT总结:

    14