开始日期和结束日期数组,其中后续开始日期 = 前一个结束日期 +1 WORKDAY
Array of start and end dates where the proceeding start date = the previous end date +1 WORKDAY
是否可以使用单个公式为每个任务制作两列日期(开始和结束),其中只有初始开始日期和天数?我可以向下拖动公式,但如果可能的话,我宁愿拥有 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”并不总是准确的,导致周末无意中显示为有效工作日。
为什么不这样做:
粘贴到单元格 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))))&"$"), "♀", )="♀"))
是否可以使用单个公式为每个任务制作两列日期(开始和结束),其中只有初始开始日期和天数?我可以向下拖动公式,但如果可能的话,我宁愿拥有 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”并不总是准确的,导致周末无意中显示为有效工作日。
为什么不这样做:
粘贴到单元格 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))))&"$"), "♀", )="♀"))