如何制作 Google Sheet(或 Excel)甘特图,其中某些工作日(不一定是周末)不是完整的工作日?
How can I make a Google Sheet (or Excel) Gantt chart where some of the weekdays (not necessarily on the weekend) are not full workdays?
我正在尝试制作一个 dally 动态甘特图,考虑到我的一些工作日不是完整的工作日。例如,如果星期五和星期六都是半工作日,而星期日是非工作日,则从星期一开始的三个完整工作日的任务将在星期三完成。但如果同一个任务在星期五开始,它将在连续的星期二完成。这样同一个三个完整工作日的任务可以在甘特图上填满三到五天。
- 如何在 Google Sheet(或 Excel)甘特图上使它动态工作?我可以制作一个函数来接收任务的开始日期,考虑到我的所有限制条件(例如,星期五是半天),并计算甘特图中应该填写多少天吗?
- 是否可以使用更高的分辨率,如 1/3 工作日的子单位?
附上:
这是我想出的一个公式,它将为您提供从开始日期开始并向右上升的累积“半天”单位。这使得创建条件格式以突出显示项目长度内的单元格变得简单。
=ARRAYFORMULA(IF(B4="",,MMULT(N(VLOOKUP(TEXT(F:,"dddd"),'day guide'!B:D,3,0)*(F:>=B4)),N(F:>=TRANSPOSE(F:)))))
我会把这个 sheet 无限期地留下来供其他人学习。
F2 中的公式:
=INDEX(TRANSPOSE(LEFT(TEXT(ROW(INDIRECT(1*(F1&"1/2021")&":"&
EOMONTH(1*(F1&"1/2021"), ))), {"d", "ddd"}), {2, 1})))
D4 中的公式:
=QUERY(B4:B, "where B is not null format B 'dddd'")
E4 中的公式:
=INDEX(VALUE(F1&"1/2021")-1+TRANSPOSE(QUERY(TRANSPOSE(IFNA(IF(QUERY({
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+0"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4+Col5"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4+Col5+Col6"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4+Col5+Col6+Col7"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:8))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:9))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:10))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:11))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:12))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:13))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:14))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:15))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:16))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:17))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:18))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:19))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:20))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:21))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:22))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:23))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:24))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:25))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:26))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:27))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:28))),
IF(DAY(EOMONTH(F1&"1/2021", 0))>=29,
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:29))),
IFERROR(1/(0^ROW(INDIRECT("3:"&MAX(ROW(A:A)*(A:A<>""))))))),
IF(DAY(EOMONTH(F1&"1/2021", 0))>=30,
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:30))),
IFERROR(1/(0^ROW(INDIRECT("3:"&MAX(ROW(A:A)*(A:A<>""))))))),
IF(DAY(EOMONTH(F1&"1/2021", 0))>=31,
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:31))),
IFERROR(1/(0^ROW(INDIRECT("3:"&MAX(ROW(A:A)*(A:A<>"")))))))},
"offset 1 ", 0)>C4:C,,F2:AJ2))*1),
"select "&TEXTJOIN(",", 1,
"max(Col"&ROW(INDIRECT("4:"&MAX(ROW(A:A)*(A:A<>""))))-ROW(A3)&")"))),, 2)
条件格式的自定义公式:
=($A4<>"")*(DAY($B4)<=(F*1))*(DAY($E4)>=(F*1))
spreadsheet demo
我想知道您是否可以在执行此操作时避免使用繁重的数组公式。是的,你可以 - 条件格式公式仍然是一个数组公式,但是当你使用一个相当简单的 sumproduct 在范围内移动时,自然地计算越来越多的值:
=and(F>=$B4,SUMPRODUCT(vlookup(text($F:F,"dddd"),indirect("'day guide'!$B:$D"),3,false)*($F:F>=$B4))<=$C4)
我的结束日期公式使用两个 countif 来计算所有天数和半天数,但它只是一个下拉公式:
=ArrayFormula(min(if((countifs(vlookup(text(F:AJ,"dddd"),'day guide'!$B:$D,3,false),1,column(F:AJ),"<="&column(F:AJ),F:AJ,">="&$B4)
+countifs(vlookup(text(F:AJ,"dddd"),'day guide'!$B:$D,3,false),2,column(F:AJ),"<="&column(F:AJ),F:AJ,">="&$B4)*2)>=C4,F:AJ,)))
我正在尝试制作一个 dally 动态甘特图,考虑到我的一些工作日不是完整的工作日。例如,如果星期五和星期六都是半工作日,而星期日是非工作日,则从星期一开始的三个完整工作日的任务将在星期三完成。但如果同一个任务在星期五开始,它将在连续的星期二完成。这样同一个三个完整工作日的任务可以在甘特图上填满三到五天。
- 如何在 Google Sheet(或 Excel)甘特图上使它动态工作?我可以制作一个函数来接收任务的开始日期,考虑到我的所有限制条件(例如,星期五是半天),并计算甘特图中应该填写多少天吗?
- 是否可以使用更高的分辨率,如 1/3 工作日的子单位?
附上:
这是我想出的一个公式,它将为您提供从开始日期开始并向右上升的累积“半天”单位。这使得创建条件格式以突出显示项目长度内的单元格变得简单。
=ARRAYFORMULA(IF(B4="",,MMULT(N(VLOOKUP(TEXT(F:,"dddd"),'day guide'!B:D,3,0)*(F:>=B4)),N(F:>=TRANSPOSE(F:)))))
我会把这个 sheet 无限期地留下来供其他人学习。
F2 中的公式:
=INDEX(TRANSPOSE(LEFT(TEXT(ROW(INDIRECT(1*(F1&"1/2021")&":"&
EOMONTH(1*(F1&"1/2021"), ))), {"d", "ddd"}), {2, 1})))
D4 中的公式:
=QUERY(B4:B, "where B is not null format B 'dddd'")
E4 中的公式:
=INDEX(VALUE(F1&"1/2021")-1+TRANSPOSE(QUERY(TRANSPOSE(IFNA(IF(QUERY({
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+0"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4+Col5"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4+Col5+Col6"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select Col1+Col2+Col3+Col4+Col5+Col6+Col7"),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:8))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:9))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:10))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:11))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:12))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:13))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:14))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:15))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:16))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:17))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:18))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:19))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:20))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:21))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:22))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:23))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:24))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:25))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:26))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:27))),
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:28))),
IF(DAY(EOMONTH(F1&"1/2021", 0))>=29,
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:29))),
IFERROR(1/(0^ROW(INDIRECT("3:"&MAX(ROW(A:A)*(A:A<>""))))))),
IF(DAY(EOMONTH(F1&"1/2021", 0))>=30,
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:30))),
IFERROR(1/(0^ROW(INDIRECT("3:"&MAX(ROW(A:A)*(A:A<>""))))))),
IF(DAY(EOMONTH(F1&"1/2021", 0))>=31,
QUERY(IF(N(IFNA(SPLIT(REPT(10, DAY(INDIRECT("B4:B"&MAX(ROW(B:B)*(B:B<>""))))-1), 0)*
TRANSPOSE(ROW(
INDIRECT("1:"&DAY(EOMONTH(F1&"1/2021", 0))))^0))=0)=0, 0,
TRANSPOSE(QUERY({D12:D18; D12:D18; D12:D18; D12:D18; D12:D18; D12:D18},
"limit "&DAY(EOMONTH(F1&"1/2021", 0))&"
offset "&MATCH(TEXT(F1&"1/2021", "dddd"), C12:C18, 0)-1))),
"select "&TEXTJOIN("+", 1, "Col"&ROW(1:31))),
IFERROR(1/(0^ROW(INDIRECT("3:"&MAX(ROW(A:A)*(A:A<>"")))))))},
"offset 1 ", 0)>C4:C,,F2:AJ2))*1),
"select "&TEXTJOIN(",", 1,
"max(Col"&ROW(INDIRECT("4:"&MAX(ROW(A:A)*(A:A<>""))))-ROW(A3)&")"))),, 2)
条件格式的自定义公式:
=($A4<>"")*(DAY($B4)<=(F*1))*(DAY($E4)>=(F*1))
spreadsheet demo
我想知道您是否可以在执行此操作时避免使用繁重的数组公式。是的,你可以 - 条件格式公式仍然是一个数组公式,但是当你使用一个相当简单的 sumproduct 在范围内移动时,自然地计算越来越多的值:
=and(F>=$B4,SUMPRODUCT(vlookup(text($F:F,"dddd"),indirect("'day guide'!$B:$D"),3,false)*($F:F>=$B4))<=$C4)
我的结束日期公式使用两个 countif 来计算所有天数和半天数,但它只是一个下拉公式:
=ArrayFormula(min(if((countifs(vlookup(text(F:AJ,"dddd"),'day guide'!$B:$D,3,false),1,column(F:AJ),"<="&column(F:AJ),F:AJ,">="&$B4)
+countifs(vlookup(text(F:AJ,"dddd"),'day guide'!$B:$D,3,false),2,column(F:AJ),"<="&column(F:AJ),F:AJ,">="&$B4)*2)>=C4,F:AJ,)))