很久很久以前,用于统计公司工时的一个VBA脚本,只使用了一小段时间。
代码写的有些傻傻的,哈哈哈。
Sub Summary()
'统计行数
Dim TotalLine As Integer
TotalLine = 1
Dim i, j As Integer
i = 1
j = 1
Dim name As String
'清空上次统计信息
Sheet32.Range("A2:F301").ClearContents
'计算人名
name = Sheet1.Cells(2, 2)
name = Right(name, Len(name) - 3)
'遍历所有sheets
For i = 1 To 31
'每个sheets中有效行数
For j = 4 To 12
'判断一行是否为空
If (Worksheets(i).Cells(j, 1) = "" And Worksheets(i).Cells(j, 2) = "" And Worksheets(i).Cells(j, 3) = "" And Worksheets(i).Cells(j, 4) = "" And Worksheets(i).Cells(j, 5) = "") Then
'空行,不做处理
Else
'非空行,进行统计
TotalLine = TotalLine + 1
Sheet32.Cells(TotalLine, 1) = Worksheets(i).Cells(j, 4)
Sheet32.Cells(TotalLine, 2) = Worksheets(i).Cells(j, 5)
Sheet32.Cells(TotalLine, 3) = name
If (Worksheets(i).Cells(j, 2) = "/") Then
Sheet32.Cells(TotalLine, 4) = "0"
Else
Sheet32.Cells(TotalLine, 4) = Worksheets(i).Cells(j, 2)
End If
If (Worksheets(i).Cells(j, 3) = "/") Then
Sheet32.Cells(TotalLine, 5) = "0"
Else
Sheet32.Cells(TotalLine, 5) = Worksheets(i).Cells(j, 3)
End If
Sheet32.Cells(TotalLine, 6) = Sheet32.Cells(TotalLine, 4) + Sheet32.Cells(TotalLine, 5)
End If
Next j
Next i
'清空上次统计信息
Sheet33.Range("A2:F301").ClearContents
'任务行数
Dim TaskLine As Integer
TaskLine = 1
'本条记录是否添加
Dim bFind As Boolean
'效率低下的循环
For i = 2 To TotalLine
bFind = False
For j = 2 To TaskLine
If (Sheet32.Cells(i, 1) = Sheet33.Cells(j, 1) And Sheet32.Cells(i, 2) = Sheet33.Cells(j, 2)) Then
Sheet33.Cells(j, 4) = Sheet33.Cells(j, 4) + Sheet32.Cells(i, 4)
Sheet33.Cells(j, 5) = Sheet33.Cells(j, 5) + Sheet32.Cells(i, 5)
Sheet33.Cells(j, 6) = Sheet33.Cells(j, 6) + Sheet32.Cells(i, 6)
bFind = True
Exit For
End If
Next j
If (Not bFind) Then
TaskLine = TaskLine + 1
Sheet33.Cells(TaskLine, 1) = Sheet32.Cells(i, 1)
Sheet33.Cells(TaskLine, 2) = Sheet32.Cells(i, 2)
Sheet33.Cells(TaskLine, 3) = Sheet32.Cells(i, 3)
Sheet33.Cells(TaskLine, 4) = Sheet32.Cells(i, 4)
Sheet33.Cells(TaskLine, 5) = Sheet32.Cells(i, 5)
Sheet33.Cells(TaskLine, 6) = Sheet32.Cells(i, 6)
End If
Next i
MsgBox ("任务完成咯 :)")
End Sub