随时间分配值

Distributing Values Over Time

在这个例子中,我有两列数据:日期和数量。

示例: (见截图 Link)

我想使用excel公式(如果可能的话)'level load'这些数量并传播它们在给定的时间范围内尽可能均匀地输出,同时保留整数。每个值的理想日期对应给定周的星期四。

想要的结果: (见截图 Link)

这是可能的,但很难。这是我的两分钱(我可能想多了):

  • 假设可以访问最新的 BETA-functions(或下面提到的替代方案);
  • 月份依次排列,例如:五月 > 六月 > 七月等

E2中的公式:

=LET(A,SEQUENCE(EOMONTH(A5,0)-A3,,A3),B,FILTER(A,(WEEKDAY(A)=5)*((DAY(A)/7)-0.1<VLOOKUP(A,A3:B5,2))),C,BYROW(B,LAMBDA(x,SUM(--(MONTH(B)=MONTH(x))))),D,VLOOKUP(B,A3:B5,2),VSTACK(A2:B2,HSTACK(B,FLOOR(D/C,1)+TEXTSPLIT(CONCAT(TAKE(UNIQUE(HSTACK(MONTH(B),RIGHT("0|0|0|0|0|"&REPT("1|",MOD(D,C)),C*2))),,-1)),,"|",1))))

或者(同样冗长,但没有 TEXTSPLIT()):

=LET(A,SEQUENCE(EOMONTH(A5,0)-A3,,A3),B,FILTER(A,(WEEKDAY(A)=5)*((DAY(A)/7)-0.1<VLOOKUP(A,A3:B5,2))),C,BYROW(B,LAMBDA(x,SUM(--(MONTH(B)=MONTH(x))))),D,VLOOKUP(B,A3:B5,2),VSTACK(A2:B2,HSTACK(B,FLOOR(D/C,1)+MID(CONCAT(TAKE(UNIQUE(HSTACK(MONTH(B),RIGHT("00000"&REPT("1",MOD(D,C)),C))),,-1)),SEQUENCE(COUNT(B)),1))))

如您所知,这是一个延伸(仅证明@Scott 在评论中的观点,即通过 VBA 这可能更容易)。


如果您有 ms365 但无法访问 BETA-functions,您可以使用:

=LET(A,SEQUENCE(EOMONTH(A5,0)-A3,,A3),B,FILTER(A,(WEEKDAY(A)=5)*((DAY(A)/7)-0.1<VLOOKUP(A,A3:B5,2))),C,BYROW(B,LAMBDA(x,SUM(--(MONTH(B)=MONTH(x))))),D,VLOOKUP(B,A3:B5,2),CHOOSE({1,2},B,FLOOR(D/C,1)+MID(CONCAT(INDEX(UNIQUE(CHOOSE({1,2},MONTH(B),RIGHT("00000"&REPT("1",MOD(D,C)),C))),,2)),SEQUENCE(COUNT(B)),1)))

您只需要自己添加标题(因为没有VSTACK())。