VBA自适应多种排班计划日期填充

实例需求:某公司有两种不同排班计划

  • MWF: 周一周三周五-周一周三周五…
  • TTS: 周二周四周六-周二周四周六…

但是数据表中有时会缺少部分日期,为了便于汇总多个部分的数据,现在需要将日期补全,对于补充的日期标记为黄色。

在这里插入图片描述


先讨论一些如何计算不同排班计划中的下一个有效时间。

  • 使用Weekday函数可以返回代表星期x的数字,这个函数支持多种方案,例如:周一开始,周日开始等等。本代码使用周一作为日历周的开始日,即:周一至周日,返回值为1~7。
  • 下表中“日期间隔”列统计每个日期和之前相邻日期的间隔天数,可以看出两种排班计划都是按2-2-3的模式再重复。
  • 对于TTS排班,除了周二之外,weekday 返回值是日期间隔的两倍
  • 对于MWF排班,只需要将 weekday 返回值加一,就可用按照TTS排班处理
MWFWeekday日期间隔TTSWeekday日期间隔
2024/1/1122024/1/222
2024/1/3322024/1/442
2024/1/5532024/1/663
2024/1/8122024/1/922
2024/1/10322024/1/1142
2024/1/12532024/1/1363
2024/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行代码设置插入单元格填充色为黄色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python_Zebra斑马打印机编程学习笔记(六)】基于Fnthex32.dll将文字转换为打印机指令

基于Fnthex32.dll将文字转换为打印机指令 基于Fnthex32.dll将文字转换为打印机指令前言一、Fnthex32.dll二、python 加载 Fnthex32.dll 的方法1、使用 ctypes 加载 dll2、定义 GETFONTHEX 函数的参数类型和返回类型3、准备输入参数4、分配字符缓冲区来接收输出数据5、调用 dll …

Kafka整理-数据的持久性和可靠性

Apache Kafka保证数据的持久性和可靠性主要通过以下几个机制: 1、日志存储: Kafka将所有消息持久化到磁盘。这意味着即使发生系统故障,消息数据也不会丢失。每个消息在被认为已经“提交”(Committed)之前都会被写入磁盘。2、分区复制(Replication): Kafka中的每个分区都…

php-webdriver 通过队列的方式实现工作流

最近需要批量操作某个古老的后台&#xff0c;但是流程非常复杂&#xff0c;通过 php-webdriver/webdriver 写了个基于队列的方式实现工作流&#xff1b; 可以帮你实现web ui 测试&#xff0c; 自动登录站点&#xff0c;自动识别验证码&#xff08;不复杂的那种&#xff09;&am…

第一个 Angular 项目 - 添加路由

第一个 Angular 项目 - 添加路由 前置项目是 第一个 Angular 项目 - 添加服务&#xff0c;之前的切换页面使用的是 ngIf 对渲染的组件进行判断&#xff0c;从而完成渲染。这一步的打算是添加路由&#xff0c;同时添加 edit recipe 的功能(同样通过路由实现) 用到的内容为&…

解决物理机装不上VMnet1和VMnet8的虚拟网卡问题

问题描述&#xff1a; 博主在使用虚拟机时&#xff0c;发现物理机的ping命令连接不上虚拟机&#xff0c;导致xshell软件也连接不上&#xff0c;最后发现问题是更改适配器设置中没有虚拟机的网卡&#xff08;VMnet1和VMnet8&#xff09;&#xff1a; 方法一&#xff1a; 博主搜…

【MySQL】深入解析日志系统:undo log、redo log、bin log

文章目录 前言1、undo log1.1、undo log 是什么1.2、事务回滚 2、redo log2.1、redo log 是什么2.2、redo log 刷盘2.3、redo log 硬盘文件 3、bin log3.1、bin log 是什么3.2、bin log 和 redo log 区别3.3、bin log 刷盘3.4、两阶段提交 前言 MySQL数据库提供了功能强大的日…

LeetCode 1976.到达目的地的方案数:单源最短路的Dijkstra算法

【LetMeFly】1976.到达目的地的方案数&#xff1a;单源最短路的Dijkstra算法 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-ways-to-arrive-at-destination/ 你在一个城市里&#xff0c;城市由 n 个路口组成&#xff0c;路口编号为 0 到 n - 1 &#xff…

使用vite创建一个vue3项目

创建一个vue3项目 1.使用命令npm create vuelatest来创建一个vue3项目&#xff0c;注意&#xff1a;官网说明了必须node版本是18及以上的&#xff0c;这边需要注意下 2.然后根据提示进入项目目录 先npm install安装依赖&#xff0c;然后npm run dev启动项目 大家可以看到&am…

Windows安装Go语言及VScode配置

最近搞自己的网站时突然想起来很多上学时的事&#xff0c;那会美国总统还是奥巴马&#xff0c;网页课教的是DreamWeaver跟Photoshop&#xff0c;其他语言像PHP、Java8、Python都有学一点&#xff0c;讲究一个所见即所得。虽然是信管专业那时和斌桑班长对新语言很感兴趣&#xf…

分享一个完全免费的GPT4站点,gpts也可以用

给大家分享一个完全免费的GPT4站点&#xff0c;gpts也可以用点击链接可用

init 5 相比 3 -- 增加的进程

init 5 (135)相比 3(66) -- 增加的进程(红色) root 1 0 0 Mar03 ? 00:00:13 /sbin/init auto noprompt root /lib/systemd/systemd-journald root vmware-vmblock-fuse /run/vmblock-fuse -o rw,subtype=vmware-vmblock,default_p…

【Leetcode】1588.所有奇数长度子数组的和

题目描述 思路 题目要求我们求解所有奇数长度数组的和。若暴力循环求解&#xff0c;时间复杂度过高。所以&#xff0c;我们可以采用前缀和优化。 如上图输入arr数组&#xff0c;sum[i]用于计算arr数组中前i个数的和。(在程序中&#xff0c;先给sum[0]赋值&#xff0c;等于arr[0…

小程序API能力集成指南——画布API汇总(三)

CanvasContext canvas 组件的绘图上下文。 方法如下&#xff08;2&#xff09;&#xff1a; arc CanvasContext.arc CanvasContext.arc(number x, number y, number r, number sAngle, number eAngle, boolean counterclockwise) 功能描述 创建一条弧线。 创建一个圆可…

android开发者工具,最新整理

一 Java相关 1.重载函数的签名(区别是否是重载函数) 答&#xff1a;方法名参数类型参数顺序(返回值不是) 2.finalize的工作原理 答&#xff1a;一旦垃圾收集器准备好释放对象占用的存储空间&#xff0c;它首先调用finalize()&#xff0c;而且只有在下一次垃圾收集过程中&#…

AlibabaCloud微服务:Linux 部署 Sentinel 流量控制

目录 一、实验 1.环境 2.Linux 部署 Sentinel 3. 微服务接入Sentinel配置 二、 问题 1.Linux本地启动Sentinel控制台 2.JDBC连接失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统软件版本IP备注Linuxopenjdk 1.8.0192.168.204.200 maven3.5.0nac…

构建强大的Spring Boot多租户系统

在当今互联网时代&#xff0c;许多企业都在寻求更灵活和可扩展的解决方案来满足不断增长的业务需求。Spring Boot多租户系统为企业提供了一种有效的方式&#xff0c;以实现更好的资源利用率和业务逻辑的隔离。本文将深入讨论Spring Boot多租户系统的关键方面&#xff0c;包括租…

服务器硬件基础知识

服务器硬件是指构成服务器的各种硬件组件&#xff0c;包括主板、处理器、内存、硬盘、电源等。这些硬件组件相互协作&#xff0c;为服务器提供计算和存储能力&#xff0c;使其能够运行各种应用程序和服务。 主板&#xff08;Motherboard&#xff09; 主板是服务器的核心组件&am…

C++ 20标准协同程序(协程)基于编译器展开的 stackless 协程。

在查阅本文之前&#xff0c;请先查看本人的另外一篇关于协同程序切换的文献&#xff0c;这对于如何正确协同程序编程很有价值。 C/C 如何正确的切换协同程序&#xff1f;&#xff08;基于协程的并行架构&#xff09;-CSDN博客 我本人相当反对&#xff0c;在项目之中使用 C 20标…

【踩坑专栏】追根溯源,从Linux磁盘爆满排查故障:mycat2与navicat不兼容导致日志暴增

昨天遇到了一个比较奇怪的问题&#xff0c;就是在挂起虚拟机的时候&#xff0c;虚拟机提示我XX脚本正在运行&#xff0c;很奇怪&#xff0c;我没有运行脚本&#xff0c;为什么会提示我这个呢。今天恢复虚拟机&#xff0c;也提示了一下脚本的问题&#xff0c;而且发现Linux明显异…

基于单片机的便携式快速干衣设备设计

摘 要:以单片机为核心,设计了一种便携式快速干衣装置。该装置基于单片机对风扇、加热器、臭氧发生装置等进行控制,通过监测热风温度、衣服干燥程度等参数,将热风送入烘干服中,在湿衣内部进行加热,从而达到快速烘干、安全工作的效果。本设计采用单片机语言编程,具有操作…