基于星期几的动态工作计划
Dynamic Work Schedule Based on Day of Week
我正在尝试创建一个工作计划,根据是否是工作日 and/or 周末来调整任务的开始和结束日期(在本例中为 'lesson')。我根据星期几为每个 'lesson' 分配了一个完整天数的值。我希望如果一节课在一周内需要 2 天才能完成,并且范围 'start.date:start.date + 2' 不包含周末,那么结束日期将是 'start.date + 2'(例如星期一 + 2)。同样,如果同一节课在周末需要 1 天才能完成,并且范围 'start.date:start.date + 1' 不包含工作日,则结束日期将为 'start.date + 1'(例如星期六 + 1)。
但是,棘手的部分是当该范围同时包含工作日和周末时。在那种情况下,我希望它在两种长度之间切换。例如,如果所有课程在一周内上课 2 天,在周末上课 1 天,如果:
start.date(1) = beginning of Friday, end.date(1) = halfway through Saturday (1 weekday + 0.5 weekend).
start.date(2) = halfway through Saturday, end.date(2) = halfway through Sunday.
start.date(3) = halfway through Sunday, end.date(3) = end of Monday (0.5 weekend + 1 weekday).
我附上了电子表格和显示我目前拥有的公式的图片。它工作正常,直到单元格 H11 中的结束日期。它应该读作星期二(因为 J11 应该 = 1,而 K11 应该 = 0.5)
https://1drv.ms/x/s!ApoCMYBhswHzhttuLQmKNVw7G6pHSw
如果这更适合 Python 或 R,甚至 VBA,那么我很乐意听到对这些的建议(也包括相关的阅读内容,以便我可以开始编写必要的代码),但我目前还不具备良好的开端所需的知识。
感谢您的帮助。
你必须把这个宏插入你的工作簿,我已经提到了步骤,但如果你觉得困难,可以告诉我。
- 在 excel window
中单击 Alt+F11
- VBA编辑器会在一个新的window中打开,在这个window中有一个
左侧窗格命名为项目 window
- 在项目 window 中右键单击此工作簿并插入模块。
- 在新打开的文本编辑器中粘贴以下代码
.
Function calcEndDate(start_date, weekday_duration, weekend_duration)
ratio = weekday_duration / weekend_duration
temp_date = start_date
day_name = ""
For i = 1 To weekday_duration
day_name = Format(temp_date, "dddd")
If (day_name = "Saturday" Or day_name = "Sunday") Then
temp_date = temp_date + 1 / ratio
Else
temp_date = temp_date + 1
End If
Next
calcEndDate = temp_date
End Function
现在将此公式粘贴到任何单元格中,它将使用开始日期和持续时间计算结束日期
calcEndDate(start_date, weekday_duration, weekend_duration)
之后,您必须将工作簿保存为 xlsm(启用宏 excel 工作簿)格式
例如,对于您的第一行,它将是 =calcEndDate(F3,B3,C3)
然后将该列的格式更改为mm/dd/yyyy hh:mm,这样您就可以知道课程是否在半天后结束。
我正在尝试创建一个工作计划,根据是否是工作日 and/or 周末来调整任务的开始和结束日期(在本例中为 'lesson')。我根据星期几为每个 'lesson' 分配了一个完整天数的值。我希望如果一节课在一周内需要 2 天才能完成,并且范围 'start.date:start.date + 2' 不包含周末,那么结束日期将是 'start.date + 2'(例如星期一 + 2)。同样,如果同一节课在周末需要 1 天才能完成,并且范围 'start.date:start.date + 1' 不包含工作日,则结束日期将为 'start.date + 1'(例如星期六 + 1)。
但是,棘手的部分是当该范围同时包含工作日和周末时。在那种情况下,我希望它在两种长度之间切换。例如,如果所有课程在一周内上课 2 天,在周末上课 1 天,如果:
start.date(1) = beginning of Friday, end.date(1) = halfway through Saturday (1 weekday + 0.5 weekend).
start.date(2) = halfway through Saturday, end.date(2) = halfway through Sunday.
start.date(3) = halfway through Sunday, end.date(3) = end of Monday (0.5 weekend + 1 weekday).
我附上了电子表格和显示我目前拥有的公式的图片。它工作正常,直到单元格 H11 中的结束日期。它应该读作星期二(因为 J11 应该 = 1,而 K11 应该 = 0.5)
https://1drv.ms/x/s!ApoCMYBhswHzhttuLQmKNVw7G6pHSw
如果这更适合 Python 或 R,甚至 VBA,那么我很乐意听到对这些的建议(也包括相关的阅读内容,以便我可以开始编写必要的代码),但我目前还不具备良好的开端所需的知识。
感谢您的帮助。
你必须把这个宏插入你的工作簿,我已经提到了步骤,但如果你觉得困难,可以告诉我。
- 在 excel window 中单击 Alt+F11
- VBA编辑器会在一个新的window中打开,在这个window中有一个 左侧窗格命名为项目 window
- 在项目 window 中右键单击此工作簿并插入模块。
- 在新打开的文本编辑器中粘贴以下代码
.
Function calcEndDate(start_date, weekday_duration, weekend_duration)
ratio = weekday_duration / weekend_duration
temp_date = start_date
day_name = ""
For i = 1 To weekday_duration
day_name = Format(temp_date, "dddd")
If (day_name = "Saturday" Or day_name = "Sunday") Then
temp_date = temp_date + 1 / ratio
Else
temp_date = temp_date + 1
End If
Next
calcEndDate = temp_date
End Function
现在将此公式粘贴到任何单元格中,它将使用开始日期和持续时间计算结束日期
calcEndDate(start_date, weekday_duration, weekend_duration)
之后,您必须将工作簿保存为 xlsm(启用宏 excel 工作簿)格式
例如,对于您的第一行,它将是 =calcEndDate(F3,B3,C3)
然后将该列的格式更改为mm/dd/yyyy hh:mm,这样您就可以知道课程是否在半天后结束。