为了能拉到项目,在贿赂项目负责人员方面也是蛮拼的,直接帮忙减轻工作负担,用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