VBA快速智能拆分日期

实例需求:

  1. A列为待处理数据,日期有多种格式
  • 单个日期:6.16
  • 同月简写时间段:7.7-8,其含为7.7-7.8
  • 跨月时间段:5.29-6.2
  1. 现在需要将A列日期,按照如下规则筛选,并提取开始日期和结束日期,填写在B列和C列
  • 时间段(包含起止日期)大于等于5天
  • 如果没有符合条件的时间段,B列和C列留空
  • 如果有多个符合条件的时间段,提取最后一个,例如A2单元格中,5.15-19和5.29-6.2都符合条件,那么从5.29-6.2中提取起止日期

在这里插入图片描述

示例代码如下。

Sub SplitDate()Dim arrDT, arrDate, i As Long, j As LongDim dDate1 As Date, dDate2 As Date, iMth As LongConst DT_FORMAT = "yyyy-mm-dd"For i = 2 To Cells(Rows.Count, 1).End(xlUp).RowarrDT = Split(Cells(i, 1), ",")For j = UBound(arrDT) To 0 Step -1arrDate = Split(Replace(Replace(arrDT(j), "-", "|"), ".", "-"), "|")If UBound(arrDate) > 0 And IsDate(arrDate(0)) ThendDate1 = CDate(arrDate(0))iMth = Month(dDate1)If InStr(arrDate(1), "-") = 0 ThenarrDate(1) = iMth & "-" & arrDate(1)End IfdDate2 = CDate(arrDate(1))If dDate2 - dDate1 >= 4 ThenCells(i, 2) = Format(dDate1, DT_FORMAT)Cells(i, 3) = Format(dDate2, DT_FORMAT)Exit ForEnd IfEnd IfNextNext
End Sub

【代码解析】
第5~23行代码循环遍历A列单元格处理数据。
第6行代码将原日期使用逗号拆分为单个时间段。
第7~22行代码倒序处理拆分后的时间段。
第8行代码将数据段再次拆分。首先将减号替换为竖线,然后将小数点替换为减号,最后使用数据作为分割符拆分为起止日期。多次替换的目的是为了将起止日期转换为y-m的格式,以便于后续处理。
第9行代码中UBound(arrDate) > 0说明时间段包含两个日期,否则为单日期。
第10行代码中将拆分后的开始日期字符串转换为日期数据,年份将使用当前日历年,例如:Cdate("5-2")的结果为2024/5/2
注意:本示例代码并不适用于计算跨年的日期间隔,例如12.30-1.2
第11行代码获取开始日期的月份。
第12行代码判断结束日期字符串中是否包含减号,如果不包含说明是简写格式,第13行在日期之前添加将添加月份和减号。
第15行代码将结束日期字符串转换为日期数据。
第16行代码判断日期间隔是否满足要求。
如果满足要求,第17~18行代码将开始日期和结束日期分别写入B列和C列。
第19行代码退出For循环。

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

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

相关文章

【docker】linux系统docker的安装及使用

一、docker应用的安装 1.1 安装方式 Docker的自动化安装,即使用提供的一键安装的脚本,进行安装。 官方的一键安装方式:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令:curl -s…

springboot133在线课程管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

精品基于Uniapp+ssm学生成绩管理系统App

《[含文档PPT源码等]精品基于Uniappssm学生成绩管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:ssm 安卓框架&#xff1a…

C#,最小生成树(MST)普里姆(Prim)算法的源代码

Vojtěch Jarnk 一、Prim算法简史 Prim算法(普里姆算法),是1930年捷克数学家算法沃伊捷赫亚尔尼克(Vojtěch Jarnk)最早设计; 1957年,由美国计算机科学家罗伯特普里姆独立实现; 19…

基础功能认识

文件传输方法 获取桌面文件 回传 3:FTP文件传输协议 进入和退出PYTHON界面 官方自带编译软件 设置中文 接下来安装C环境 安装Wiring库常见问题 终端窗口-------输入gpio -v-----------------输入gpio readall----可能报错,输入 输入gpio readall 可看…

uni-app 微信小程序之红包雨活动

文章目录 1. 页面效果2. 页面样式代码 1. 页面效果 GIF录屏有点卡&#xff0c;实际比较丝滑 每0.5s掉落一个红包控制4s后自动移除红包点击红包消除红包&#xff08;或者自行1&#xff0c;或者弹窗需求&#xff09; 2. 页面样式代码 <!-- 红包雨活动 --> <template>…

总结和考试

总结和考试 1. 代码规范1.1 名称1.2 注释1.3 todo1.4 条件嵌套1.5 简单逻辑先处理1.6 循环1.7 变量和值 2.知识补充2.1 pass2.2 is 比较2.3 位运算 3.阶段总结4.考试题 1. 代码规范 程序员写代码是有规范的&#xff0c;不只是实现功能而已。 1.1 名称 在Python开发过程中会创…

D55XT100-ASEMI整流桥D55XT100参数、封装、规格

编辑&#xff1a;ll D55XT100-ASEMI整流桥D55XT100参数、封装、规格 型号&#xff1a;D55XT100 品牌&#xff1a;ASEMI 正向电流&#xff08;Id&#xff09;&#xff1a;55A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;550A 正向…

shell脚本之循环语句

一 echo命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符&#xff1a;要举例为证 二 date date查看当前系统时间 -d 你描述的日期&#xff0c;显示指定字符串所描述的时间&#xff0c;而非当前时间 %F 完整日期格式&#xff0c;等价于 %Y…

跟着pink老师前端入门教程-day11

3、CSS 三角 网页中常见一些三角形&#xff0c;使用CSS直接画出来即可&#xff0c;不必做成图片或字体图标 4、CSS 用户界面样式 4.1 什么是界面样式 界面样式&#xff1a;更改一些用户操作样式&#xff0c;以便提高更好的用户体验&#xff08;更改用户的鼠标样式、表单轮廓…

uniapp 使用echarts做折线图条形图。

提前10天把中烟活动做完了&#xff0c;以为能打酱油到除夕那天&#xff0c;结果又要做什么数据看板&#xff0c;方便烟草领导过年查看数据&#xff0c;还只给5天时间&#xff0c;真实压榨剥削啊&#xff0c;下辈子再也不‘拍黄片’了&#xff0c;不&#xff01;下份工作我就转前…

HCIA学习作业二

要求&#xff1a;基于192.168.1.0/24进行合理划分&#xff0c;要求全网通 [AR3]display ip interface brief [AR3]display ip routing-table [AR1]display ip interface brief [AR1]display ip routing-table [AR2]display ip interface brief [AR2]display ip routing-tab…