按开始日期和结束日期在数周内平均分配价值

Distribute value equally over weeks by start- and end-date

我想按开始日期和结束日期 (B4:C6) 在周数 (E3:J3) 上平均分配某个值 (D4:D6),如图所示在示例中。

一个formula/vba脚本应该做以下事情:

要复制的文本格式示例:

                                2017        2018        
    Start       End       Value 50  51  52  1   2   3
    26.12.2017  04.01.2018  20  -   -   10  10  -   -
    12.12.2017  24.12.2017  50  25  25  -   -   -   -
    11.12.2017  10.01.2018  60  12  12  12  12  12  -

对于如何实现单个步骤的提示/想法也很高兴。

概念验证:

将下面的公式放在E4中,向下向右复制

=IF(WEEKNUM($C4,21)-WEEKNUM($B4,21)<0,IF(OR(E>=WEEKNUM($B4,21),E<=WEEKNUM($C4,21)),$D4/IF(WEEKNUM($C4,21)-WEEKNUM($B4,21)<0,MAX(WEEKNUM(DATE(YEAR($B4),12,{28,29,30,31}),21))-WEEKNUM($B4,21)+WEEKNUM($C4,21)+1,WEEKNUM($C4,21)-WEEKNUM($B4,21)+1),0),IF(AND(E>=WEEKNUM($B4,21),E<=WEEKNUM($C4,21)),$D4/IF(WEEKNUM($C4,21)-WEEKNUM($B4,21)<0,MAX(WEEKNUM(DATE(YEAR($B4),12,{28,29,30,31}),21))-WEEKNUM($B4,21)+WEEKNUM($C4,21)+1,WEEKNUM($C4,21)-WEEKNUM($B4,21)+1),0))

现在这是一个由多个单元格组成的公式,我将其替换为上面的畸形公式。分解如下

第 1 步

找到开始周数。将以下内容放入 B8.

=WEEKNUM($B4,21)

第 2 步

找到结束周数。将以下内容放在 C8 中。

=WEEKNUM($C4,21)

第 3 步

确定一年中的最大周数。感谢 Ron Rosenfeld 提供的这个公式。将以下内容放在 D8 中。

=MAX(WEEKNUM(DATE(YEAR($B4),12,{28,29,30,31}),21))

第 4 步

判断该周是在同年还是次年。将以下内容放入 E8.

=C8-B8

第 5 步

确定周数。将以下内容放入 F8.

=IF(E8<0,D8-B8+C8+1,C8-B8+1)

第 6 步

平均每周的值。将以下内容放入 G8.

=D4/F8

第 7 步

确定平均值是否属于日期 header 或 0 的值(如果您想要一个实际的破折号,而不仅仅是将 0 格式化为破折号,则将 0 更改为 -。将以下公式放入H8.

=IF($E8<0,IF(OR(E>=$B8,E<=$C8),$G8,0),IF(AND(E>=$B8,E<=$C8),$G8,0)) 

按要求向右下复制H8公式

警告:将在工作周内工作 1 年。我非常怀疑它能否在多年的开始和结束一周内发挥作用。

步骤布局