我正在尝试创建一个工作计划,以根据是工作日还是周末来调整任务的开始和结束日期(在本例中为“课程”)。我已根据一周中的某天为每个“课程”分配了整天的值。我的希望是,如果一周中的一堂课需要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,那么我很乐意听到关于这些的建议(还包括相关阅读内容,以便我可以开始编写必要的代码),但是我只是目前没有足够的知识来开始一个不错的开始。
感谢您的帮助。
答案 0 :(得分:1)
您必须将此宏插入工作簿中,我已经提到了这些步骤,但是如果发现困难,可以告诉我。
。
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(开始日期,工作日持续时间,周末持续时间)
此后,您必须将工作簿保存为xlsm(启用了宏的excel工作簿)格式
例如,对于您的第一行,它将是= calcEndDate(F3,B3,C3)
然后将该列的格式更改为mm / dd / yyyy hh:mm,这样您就可以知道课程是否在半天后结束。