多个时间段统计

这篇博客介绍了如何处理和统计多个交叉进行的时间段任务,包括需求分析、解决思路和过程,以及后续的代码优化。通过排序、分情况处理和递归调用来计算总时间,最终实现性能优化。
摘要由CSDN通过智能技术生成

    前段时间,用户提出一个关于时间段统计的需求,要求:存在多个时间段的任务,有任务的开始时间和结束时间,任务的时间可能是交叉进行,然后统计出所有任务完成的总时间。

   一、明确需求

    需求出来之后,首先要做的就是需求分析,而该任务的主要是通过时间段来进行统计,统计连续时间段差值的总和, 例如有如下时间段:      

开始时间
结束时间
2016-9-1
2016-9-1-15
2016-9-1
2016-9-1-13
2016-9-3
2016-9-1-17
2016-9-19
2016-9-1-21
在Excel VBA中,如果你想要按照特定的时间段(例如每天、每周或每月)统计Sheet2的A列单元格的数量,你可以编写一段宏来完成这个任务。首先,你需要确定时间段的划分规则,然后遍历A列,将日期转换为适合比较的时间范围,并计数每个时间范围内出现的行数。 以下是一个基本的步骤和示例代码: 1. 定义开始和结束日期(例如,你想统计过去一年的数据),以及时间段的粒度(如天、周或月)。 ```vba Dim startDate As Date Dim endDate As Date Dim interval As Long ' 表示时间段,比如1代表一天 startDate = DateAdd("d", -365, Date) ' 这里假设统计过去一年 endDate = Date interval = 1 ' 如果是按天计算 ' 更改此处,如果需要其他时间段,如一周或一个月 ' interval = 7 对于一周 ' interval = 28 或 interval = DatePart("m", #1/1#) 对于一个月 ``` 2. 创建一个新变量来存储每个时间段内的行数。 ```vba Dim rowCounter(interval To 0) As Integer ' Array to store count for each interval ``` 3. 使用For...Next循环遍历A列,并根据日期判断属于哪段时间。 ```vba For Each cell In Sheet2.Range("A:A") Dim dateCell As Date dateCell = cell.Value ' 提取A列的日期值 ' 根据日期范围和间隔,计算索引位置 Dim rangeIndex As Long If Interval > 1 Then rangeIndex = DateDiff(interval, startDate, dateCell) \ interval Else rangeIndex = DateValue(dateCell) - startDate End If ' 增加对应时间段的计数 rowCounter(rangeIndex) = rowCounter(rangeIndex) + 1 Next cell ``` 4. 最后,可以打印出每个时间段的行数,或者将其保存到新的工作表或现有工作表的不同部分。 ```vba For i = LBound(rowCounter) To UBound(rowCounter) Debug.Print "时间段 " & CStr(i * interval) & " 至 " & CStr((i + 1) * interval - 1) & ": " & rowCounter(i) ' 可以在这里添加更多操作,比如写入另一个工作表 End For ```
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值