【问题标题】:Array of start and end dates where the proceeding start date = the previous end date +1 WORKDAY开始日期和结束日期数组,其中进行开始日期 = 前一个结束日期 +1 个工作日
【发布时间】:2019-12-18 05:13:49
【问题描述】:

是否可以使用单个公式制作两列日期(开始和结束),其中只有每个任务的初始开始日期和天数?我可以向下拖动公式,但如果可能的话,我宁愿拥有ARRAYFORMULA 的灵活性。

我有一个任务列表(将不断变化),其中包含完成每项任务的天数。我也有明确的开始日期。我可以使用WORKDAY获取我的结束日期

=ArrayFormula(IF(LEN(B2:B),WORKDAY.INTL(C2:C-1,B2,6,),))

,但尝试自动填充下一个开始日期总是会导致循环引用。

=ArrayFormula(WORKDAY.INTL(C2:C,B2:B,6,))

下一个问题在WORKDAY 函数的[weekend] 变量中。由于我的以下开始日期并不总是在同一天,“6”并不总是准确的,导致周末无意中显示为有效工作日。

Here's my test sheet

【问题讨论】:

    标签: date google-sheets google-sheets-formula array-formulas google-sheets-query


    【解决方案1】:

    为什么不这样做:

    粘贴到单元格D2

    =ARRAYFORMULA(FILTER(
     QUERY(TO_DATE(ROW(INDIRECT(DATEVALUE(C2)&":"&DATEVALUE(C2)+SUM(B2:B)*2))), 
     "where not dayofweek(Col1) matches '1|7'"), 
     IF(REGEXMATCH(TO_TEXT(ROW(INDIRECT("A1:A"&COUNTA(
     QUERY(TO_DATE(ROW(INDIRECT(DATEVALUE(C2)&":"&DATEVALUE(C2)+SUM(B2:B)*2))), 
     "where not dayofweek(Col1) matches '1|7'"))))), "^"&JOIN("$|^", 
     IF(A2:A="",,MMULT(TRANSPOSE((ROW(A2:A)<=TRANSPOSE(ROW(A2:A)))*(B2:B)), 
     SIGN(B2:B))))&"$"), "♀", )="♀"))
    

    粘贴到单元格C3

    =ARRAYFORMULA(IF(A3:A="",,FILTER(
     QUERY(TO_DATE(ROW(INDIRECT(DATEVALUE(C2)&":"&DATEVALUE(C2)+SUM(B2:B)*2))), 
     "where not dayofweek(Col1) matches '1|7'"), 
     IF(REGEXMATCH(TO_TEXT(ROW(INDIRECT("A1:A"&COUNTA(
     QUERY(TO_DATE(ROW(INDIRECT(DATEVALUE(C2)&":"&DATEVALUE(C2)+SUM(B2:B)*2))), 
     "where not dayofweek(Col1) matches '1|7'"))))), "^"&JOIN("$|^", 
     IF(A2:A="",,MMULT(TRANSPOSE((ROW(A2:A)<=TRANSPOSE(ROW(A2:A)))*(B2:B)), 
     SIGN(B2:B))+1))&"$"), "♀", )="♀")))
    


    带假期列表:

    =ARRAYFORMULA(FILTER(
     QUERY(TO_DATE(ROW(INDIRECT(DATEVALUE(C2)&":"&DATEVALUE(C2)+SUM(B2:B)*2))), 
     "where not dayofweek(Col1) matches '1|7' and not Col1 matches '"&
     TEXTJOIN("|", 1, H2:H)&"'"), 
     IF(REGEXMATCH(TO_TEXT(ROW(INDIRECT("A1:A"&COUNTA(
     QUERY(TO_DATE(ROW(INDIRECT(DATEVALUE(C2)&":"&DATEVALUE(C2)+SUM(B2:B)*2))), 
     "where not dayofweek(Col1) matches '1|7' and not Col1 matches '"&
     TEXTJOIN("|", 1, H2:H)&"'"))))), "^"&JOIN("$|^", 
     IF(A2:A="",,MMULT(TRANSPOSE((ROW(A2:A)<=TRANSPOSE(ROW(A2:A)))*(B2:B)), 
     SIGN(B2:B))))&"$"), "♀", )="♀"))
    

    【讨论】:

    • 这很好用!是否可以使用类似于WORKDAY 的假期列表?
    猜你喜欢
    • 2022-01-23
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2021-11-12
    • 1970-01-01
    相关资源
    最近更新 更多