人法地,地法天,天法道,道法自然
分类:
2009-04-01 23:41:13
()
我有两张表,第一张表(sheet1)是全部职工的序号,姓名和补课费金额,A1,A2,A3--------A300 是 序号, B1,B2,B3--------B300 是 补课费金额(补课费金额为空,等待第二张表的金额填入)。
第二张表(sheet2)中的内容是各个部门报上来的职工序号,姓名和补课费金额(不是全部人都有补课费,60%的人有补课费),如下:A3,A5,A7,A15,A36.........是 序号, B3,B5,B7,B15,B36..........是补课费金额。
每次发工资时,我都要将第二张表中的金额,逐一填入第一张表的金额内,工作量较大,录入太多的时候容易看错行。
能不能让第二张表中的金额,自动追随到第一张表对应的姓名后面
...
Sheet1表数据如图示:
Sheet2表数据如衅示:
可以通过VLOOKUP公式实现,但是没有代码快和方便;一次编写,可以永久使用;程序如下:
Sub 计算加班费()
Dim lastRowsFirst As Integer
Dim lastrowsSecond As Integer
Dim i As Integer
Dim j As Integer
Application.ScreenUpdating = False
Worksheets("Sheet1").Select
lastRowsFirst = Sheets("Sheet1").[A65536].End(xlUp).Row '获取数据范围Sheet1表
lastrowsSecond = Sheets("Sheet2").[A65536].End(xlUp).Row '获取数据范围Sheet2表
Range("D1").Value = lastRowsFirst
With Worksheets("Sheet2")
For i = 2 To lastRowsFirst Step 1
For j = 2 To lastrowsSecond Step 1
If Range("A" & i).Value = .Range("A" & j).Value Then '如果Sheet1中的序号与Sheet2中的序号相等的话
Range("C" & i).Value = .Range("C" & j).Value '把金额写过去
End If
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub
Sub 计算加班费2()
Dim lastRowsFirst As Integer
Dim lastrowsSecond As Integer
Dim i As Integer
Dim j As Integer
Dim count As Integer '计数器
Dim num As Integer
Application.ScreenUpdating = False
num = Sheets.count '统计工作表个数
For i = 1 To num
If Sheets(i).Name = "统计员工加班工资" Then '如果存在工作表[统计员工加班工资],删除,重新建立
Sheets(i).Delete
Exit For
End If
Next i
Worksheets.Add
ActiveSheet.Name = "统计员工加班工资"
Worksheets("Sheet1").Select
Sheets("Sheet1").Range("A1:C1").Copy '把表头复制到表"统计员工加班工资"
Sheets("统计员工加班工资").Paste Destination:=Sheets("统计员工加班工资").Range("A1")
lastRowsFirst = Sheets("Sheet1").[A65536].End(xlUp).Row '获取数据范围Sheet1表
lastrowsSecond = Sheets("Sheet2").[A65536].End(xlUp).Row '获取数据范围Sheet2表
With Worksheets("Sheet2")
count = 2
For i = 2 To lastRowsFirst Step 1
For j = 2 To lastrowsSecond Step 1
If Range("A" & i).Value = .Range("A" & j).Value Then '如果Sheet1中的序号与Sheet2中的序号相等的话
Range("C" & i).Value = .Range("C" & j).Value '把金额写过去
Sheets("统计员工加班工资").Range("A" & count).Value = Range("A" & i).Value '序号
Sheets("统计员工加班工资").Range("B" & count).Value = Range("B" & i).Value '姓名
Sheets("统计员工加班工资").Range("C" & count).Value = .Range("C" & j).Value '金额
count = count + 1
Exit For
End If
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub
在VBA,中插入模块,把代码复制过去,运行计算加班费2,就可以了,
计算加班费 "把金额复制支Sheet1中
计算加班费2 "新建一个工作表,不景响原来的Sheet1
运行宏名:计算加班费2()
运行后如图示:
没有加班的员工,不计算在表统计员工加班工资表中.