首页 > 解决方案 > 基于星期几的动态工作计划

问题描述

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

谢谢你的帮助。

在此处输入图像描述

在此处输入图像描述

标签: excelexcel-formulaschedule

解决方案


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

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


推荐阅读