excel - 基于星期几的动态工作计划
问题描述
我正在尝试创建一个工作计划,根据工作日和/或周末调整任务的开始和结束日期(在本例中为“课程”)。我根据星期几为每个“课程”分配了一个完整天数的值。我的希望是,如果一个课程需要 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 窗口中单击 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,这样您就可以知道一节课是否在半天后结束。
推荐阅读
- android - 向微调器添加类似提示的行为
- html - 如何在 ngb-tabset 中以角度加载组件时获取活动选项卡名称?
- javascript - ASP.NET Core BundleMinifier 在缩小后删除异步修饰符
- reactjs - 如何显示 Firestore 日期时间
- arduino - 使用 sim900 arduino 向 Firebase 函数发送 POST 请求
- php - 为什么我在 phpspreadsheet 的 getCell() 方法中出现错误?
- javascript - Typescript Javascript 一行 If…else…else if 语句
- javascript - 作为对象键访问时未推断类型
- reactjs - redux-saga 在运行时更改根 saga
- vue.js - Vue.js - 默认情况下无法设置单选按钮