深圳规划建设局网站,嵌入式软件开发环境有哪些,单页设计多少钱一张,如何用代码做网站实例需求#xff1a;某公司有两种不同排班计划
MWF: 周一周三周五-周一周三周五…TTS: 周二周四周六-周二周四周六…
但是数据表中有时会缺少部分日期#xff0c;为了便于汇总多个部分的数据#xff0c;现在需要将日期补全#xff0c;对于补充的日期标记为黄色。 先讨论一…实例需求某公司有两种不同排班计划
MWF: 周一周三周五-周一周三周五…TTS: 周二周四周六-周二周四周六…
但是数据表中有时会缺少部分日期为了便于汇总多个部分的数据现在需要将日期补全对于补充的日期标记为黄色。 先讨论一些如何计算不同排班计划中的下一个有效时间。
使用Weekday函数可以返回代表星期x的数字这个函数支持多种方案例如周一开始周日开始等等。本代码使用周一作为日历周的开始日即周一至周日返回值为1~7。下表中“日期间隔”列统计每个日期和之前相邻日期的间隔天数可以看出两种排班计划都是按2-2-3的模式再重复。对于TTS排班除了周二之外weekday 返回值是日期间隔的两倍对于MWF排班只需要将 weekday 返回值加一就可用按照TTS排班处理
MWFWeekday日期间隔TTSWeekday日期间隔2024/1/1122024/1/2222024/1/3322024/1/4422024/1/5532024/1/6632024/1/8122024/1/9222024/1/10322024/1/11422024/1/12532024/1/13632024/1/1512024/1/162 示例代码如下。
Sub Demo()Dim arrRes(), iR As Long, iCnt As Long, i As LongDim iDate As Date, eDate As Date, iOffset As LongiR -1With ActiveSheetiDate CDate(.Range(A2))eDate CDate(.Cells(.Rows.Count, A).End(xlUp))End WithiOffset VBA.Weekday(iDate, vbMonday) Mod 2Do While iDate eDateiR iR 1ReDim Preserve arrRes(iR)arrRes(iR) iDateiCnt (VBA.Weekday(iDate, vbMonday) iOffset) / 2iDate iDate IIf(iCnt 1, 2, iCnt)LoopFor i 0 To iRIf Not CLng(CDate(Cells(i 2, 1).Value)) CLng(arrRes(i)) ThenRows(i 2).InsertCells(i 2, 1).Value arrRes(i)Cells(i 2, 1).Interior.Color vbYellowEnd IfNext
End Sub【代码解析】 第6行代码读取单元格A2获取开始日期。 第7行代码读取A列最后一个日期即结束日期。 第9行代码根据日期的星期x来识别是当前日期序列是TTS还是MWF排班进而计算一个偏移量用于计算下一个有效日期。 第10~16行代码从开始日期至结束日期创建日期序列。 第12行代码重新分配结果数组。 第13行代码保存日期。 第14行代码计算下一个有效日期的间隔。 第15行代码计算下一个有效日期。 第17~23行代码循环变量工作表中的数据插入缺失日期。 第18行代码对比数据表中的日期与结果数组中日期。 第19行代码插入空行。 第20行代码写入增加的日期。 第21行代码设置插入单元格填充色为黄色。