基于星期几的动态工作计划

时间:2018-10-25 15:50:26

标签: excel excel-formula schedule

我正在尝试创建一个工作计划,以根据是工作日还是周末来调整任务的开始和结束日期(在本例中为“课程”)。我已根据一周中的某天为每个“课程”分配了整天的值。我的希望是,如果一周中的一堂课需要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,那么我很乐意听到关于这些的建议(还包括相关阅读内容,以便我可以开始编写必要的代码),但是我只是目前没有足够的知识来开始一个不错的开始。

感谢您的帮助。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您必须将此宏插入工作簿中,我已经提到了这些步骤,但是如果发现困难,可以告诉我。

  • 在您的Excel窗口中单击Alt + F11
  • VBA编辑器将在新窗口中打开,在此窗口中有一个 左侧窗格命名为项目窗口
  • 在项目窗口中右键单击此工作簿并插入模块。
  • 将以下代码粘贴到新打开的文本编辑器上

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,这样您就可以知道课程是否在半天后结束。