Chinaunix首页 | 论坛 | 博客
  • 博客访问: 717351
  • 博文数量: 158
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1643
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-11 14:37
个人简介

人法地,地法天,天法道,道法自然

文章分类

全部博文(158)

文章存档

2022年(1)

2020年(3)

2016年(1)

2014年(7)

2013年(4)

2010年(5)

2009年(86)

2008年(25)

2007年(26)

我的朋友

分类:

2009-04-01 23:41:13

在ExcelHome网有这样一个问题

()

我有两张表,第一张表(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()

运行后如图示:

 

没有加班的员工,不计算在表统计员工加班工资表中.

 


 

 

阅读(1000) | 评论(0) | 转发(0) |
0

上一篇:写个函数用来转化值

下一篇:FormulaArray

给主人留下些什么吧!~~