Excel宏之插入行,日期操作,时间操作,周末判断

为了能拉到项目,在贿赂项目负责人员方面也是蛮拼的,直接帮忙减轻工作负担,用VB写了个宏处理对方的excel

需求:将一段请假的日期以天为单位拆分成一条一条记录,并且忽略节假日。(即周六周日包含在请假日期区域的话则不需要记录改行条目,ps这里有个五一假日需要过滤掉,对方主要是五月份的假期统计)

for instance:



考虑了一下,觉得判断第4、6列数据是否相等就行了,不等的话就增加一行,当前行当做4列当天数据,新增行的第4列为4列日期+1,如果是节假日则继续+1,直到不是节假日为止。但是更多的有可能的问题没有校验,只当做输入实例都没有问题来处理。


具体细节不多描述了,直接上代码。

Sub aa()


Dim i, j
i = 1
Do While (Cells(i, 1) <> "")
 If Cells(i, 4) <> Cells(i, 6) Then '这里似乎用CDate(Cells(i,4))<CDate(Cells(i),6)更好
    '插入行
    Rows(i + 1).Insert
    For j = 1 To 8
        Cells(i + 1, j) = Cells(i, j)
    Next
    'i行结束日期
    Cells(i, 6) = Cells(i, 4)
    Cells(i, 7) = "17:30:00"
    'i+1行开始日期
    Cells(i + 1, 4) = DateAdd("d", 1, CDate(Cells(i + 1, 4)))
    Cells(i + 1, 5) = "08:00:00"
    '节假日
    Do While (Application.Weekday(CDate(Cells(i + 1, 4)), 2) = 6) Or (Application.Weekday(CDate


(Cells(i + 1, 4)), 2) = 7) Or CDate(Cells(i + 1, 4)) = CDate("2015-05-01")
        Cells(i + 1, 4) = DateAdd("d", 1, CDate(Cells(i + 1, 4)))
    Loop
 End If
 '时间判断,注意格式转换问题,用TimeValue
 If Cells(i, 5) = TimeValue("13:30:00") Or Cells(i, 7) = TimeValue("12:00:00") Then
    Cells(i, 8) = "0.5"
 Else
    Cells(i, 8) = "1"
 End If
 i = i + 1
Loop


End Sub

你可能感兴趣的:(Excel宏之插入行,日期操作,时间操作,周末判断)