Excel怎样把多个工作表同字段不同位置数据汇总
1、公交公司处理个税方面,需要取到工资表中所有工作表的人名、银行账户、实发工资及暂扣款项。线路众多,且由于人力资源提供的表格经常错位,例如1路的实发的工资在BP列,而69路的实发工资则在BM列,线路众多。将怎样处理?


2、工资表内容,其他路一样,字段位置有不一样。





3、汇总表内容:

1、首先打开Microsoft Office Excel 2007,上例文件另存为文件名《Excel怎样把多个工作表同字段不同位置数据汇总 .xlsm》(演示文件,下面代码复制到能运行宏的工作簿都可以)如图,由于考虑到个人隐私,列举行2条线路,并处理过的数据。

2、然后按下快捷键ALT+F11打开VBE(宏)编辑界面,然后点菜单栏【插入】下拉中列表中点【模块(M)】如图。

3、然后插入了一个模块1,在代码框中复制如下代码:
Sub 根据字段汇总表()
'2020-10-8 21:03:58
Dim sh As Worksheet, msh As String, mb(1 To 19), i As Long, r As Long, rn As Long, rm As Long
Dim myr As Range
msh = ActiveSheet.Name
mb(2) = Cells(1, 2).Text
mb(3) = Right(Cells(1, 3).Text, 2)
mb(4) = Left(Cells(1, 4).Text, 1)
For i = 5 To 18
mb(i) = Cells(2, i).Text
Next i
mb(19) = Cells(1, 19).Text
r = 3
Application.ScreenUpdating = False
For Each sh In ActiveWorkbook.Sheets
If Right(sh.Name, 1) = "路" Then
sh.Select
rn = Range("B" & Rows.Count).End(xlUp).Row
If rn < 5 Then Exit For
If r = 3 Then
ActiveWorkbook.Sheets(msh).Range("a" & r & ":a" & rn - 4 + r).Value = sh.Name
Else
ActiveWorkbook.Sheets(msh).Range("a" & r & ":a" & rn - 5 + r).Value = sh.Name
End If
For i = 2 To 19
Set myr = Cells.Find(What:=mb(i))
If Not myr Is Nothing Then
rm = myr.Column
Range(Cells(5, rm), Cells(rn, rm)).Copy
ActiveWorkbook.Sheets(msh).Cells(r, i).PasteSpecial Paste:=xlPasteValues, Operation _
:=xlNone, SkipBlanks:=False, Transpose:=False
End If
Next i
r = ActiveWorkbook.Sheets(msh).Range("B" & Rows.Count).End(xlUp).Row + 1
End If
Next sh
Application.ScreenUpdating = True
ActiveWorkbook.Sheets(msh).Select
End Sub


4、以上操作动态过程如下:

5、回到工作表窗口,注意表“汇总表”为当前窗口,并且工资表名最后要“路”,然后运行【根据字段汇总表】宏(菜单栏中点【视图】中下列表中【宏】列表【查看宏(V)】打开宏对方框,选该宏名,执行),输出各路线结果,运行过程如下图。





6、如果觉得这篇经验帮到了您,请点击下方的 “投票点赞" 或者“收藏”支持我!还有疑问的话可以点击下方的 “我有疑问”,谢谢啦!