资源预览内容
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
用EXCEL计算起止时间在各个时间段内的时长EXCELL中,常遇到这样的问题:已知起始时间和结束时间,如何计算该起止时间在指定时间段上的时间长度?比如:开始时间结束时间峰期7:00-11:00平期11:00-19:00谷期19:-07:0013:35:0021:10:005:25:002:10:0023:10:0008:25:001:25:009:50:0012:0008:001:00:007:00:0012:00:00由于起止时间有多种跨越情况,且有零点转换,用EXCEL的自带公式和函数很难实现。下面这个VBA自定义函数,能够轻松解决上面的难题。函数名tj(t1,t2,n)3个参数:t1-开始时间,t2-结束时间,为“时分秒”时间格式,可直接引用单元格n-整数1|2|3,(分别代表峰平谷的时间段)返回值:以“时分秒”形式返回起(t1)止(t2)时间在参数n所代表的时间段内的时长。在EXCEL工作表中,打开VBA编辑器,将下列代码作为模块插入,保存后即可在单元格中直接调用,格式开如:=Tj($A2,$B2,1),返回开始时间A2、结束时间B2在7-11点时间段内的时长。以下代码,在解决不同问题时,对部分参数适当修改即可实现。Function Tj(t1, t2, n As Integer)Dim f(2) As Integer, Ti(2), arr(2, 1) As Daten = n - 1arr(0, 0) = TimeValue(7:00:00)arr(0, 1) = TimeValue(4:00:00)arr(1, 0) = TimeValue(11:00:00)arr(1, 1) = TimeValue(8:00:00)arr(2, 0) = TimeValue(19:00:00)arr(2, 1) = TimeValue(12:00:00)s = t2 - t1 总时长If s arr(2, 0) Thent1_ = arr(2, 1) - (t1 - arr(2, 0)Elset1_ = arr(2, 0) - arr(2, 1) - t1End IfEnd Select-计算总时长s在各时间段内的时长arr(f(0), 1) = t1_i = 0While (s 0 And i 3)Ti(f(i) = WorksheetFunction.Min(arr(f(i), 1), s)s = s - Ti(f(i)i = i + 1WendTi(f(0) = Ti(f(0) + s 如果s在分配至其他时间段后仍有剩余Tj = Ti(n) 返回指定时间段时长If Tj = TimeValue(00:00:00) ThenTj = End IfEnd Function
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号