如何用Excel VBA计算并合并同一姓名的工资
在日常工作中,经常会遇到以下情况: 工资表按部门分为多个表,不同的部门会有同名的人。 同一部门中的某个人可能担任不同的职位,他的工资就分在几行里。 现在需要将所有部门
在日常工作中,经常会遇到以下情况:
- 工资表按部门分为多个表,不同的部门会有同名的人。
- 同一部门中的某个人可能担任不同的职位,他的工资就分在几行里。
- 现在需要将所有部门人员的工资汇总到一个表中,如果某个人的工资占据了多行,则需要合并姓名列和工资。
下面是具体的操作步骤:
步骤1:另存为启用宏的工作表
首先将工资表另存为启用宏的工作表(*.xlsm)。
步骤2:新建工作表并命名为汇总
在Excel中新建一个工作表,并将其命名为“汇总”。
步骤3:复制VBA代码
右键点击汇总表的表头,选择“查看代码”进入VBA编辑器。将以下代码复制到编辑器中:
Sub 合并汇总()
Application.DisplayAlerts False '禁止合并单元格时出现警告
'以下为合并表格
Dim sht As Worksheet, xrow As Integer
For Each sht In Worksheets
If <> Then
'复制整表
ActiveSheet.Range("a65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:xlPasteFormulas '从第一个空行选择性粘贴
End If
Next
'以下删除第一行和多余的标题行
Rows(1).Delete
Dim x As Integer
For x 2 To
If Cells(x, 1) "姓名" Then
Rows(x).Delete
End If
Next x
'以下为排序
heng
lie
Range(Cells(2, 1), Cells(heng, lie)).Sort Key1:Range("B1"), Key2:Range("A1")
'以下为合并同名单元格
Dim i As Integer
Dim first As Integer
Dim last As Integer
first 2
last 2
For i 2 To
If Cells(i, 1) Cells((i - 1), 1) Then
'计算同名的总工资
Cells(first, 6) (Range(Cells(first, 6), Cells(last, 6)))
'合并姓名
Range(Cells(first, 1), Cells(last, 1)).Select
'合并工资
Range(Cells(first, 6), Cells(last, 6)).Select
first i 1
End If
Next i
End Sub
步骤4:运行代码
点击运行按钮,执行上述代码。
步骤5:查看结果
运行结果如下所示。