分享

多表合并,你要的全在这里了,收藏好了!

 L罗乐 2017-11-30



时不时就有同学在问,一个工作簿中每天一份报表,一个月下来30份报表需要汇总成一张表,复制粘贴来的比较慢,还有的是有很多个格式一样的表位于不同的工作簿中,需要合并到一个工作表里,等等……


你可以到本公众号后台回复excel扩展,去下载小工具,里面有多表合并功能,也可以利用数据查询功能合并。


今天我们来讲讲利用VBA实现多表合并的技巧,大家可以把代码收藏好,使用的时候非常的方便。


1
工作簿内多个sheet合并到一个sheet




上边动图中有1、2、3、4,4个sheet,分别是不同部门的人员信息,需要合并到汇总sheet里。


步骤:

右键点击汇总sheet表名,查看代码,把代码复制进去,点击运行,很快就可以看到合并后的结果了。


代码如下:


Sub 合并当前工作簿下的所有工作表()

Application.ScreenUpdating = False

For j = 1 To Sheets.Count

   If Sheets(j).Name <> ActiveSheet.Name Then

       X = Range('A65536').End(xlUp).Row 1

       Sheets(j).UsedRange.Copy Cells(X, 1)

   End If

Next

Range('B1').Select

Application.ScreenUpdating = True

MsgBox '当前工作簿下的全部工作表已经合并完毕!', vbInformation, '提示'

End Sub


2
多个工作簿中的sheet合并到一个sheet



大家仔细观察,工作簿1中有两个sheet,合并的时候都会合并进去。


代码如下:


Sub 合并当前目录下所有工作簿的全部工作表()


Dim MyPath, MyName, AWbName

Dim Wb As Workbook, WbN As String


Dim G As Long


Dim Num As Long


Dim BOX As String


Application.ScreenUpdating = False


MyPath = ActiveWorkbook.Path


MyName = Dir(MyPath & '\' & '*.xlsx')


AWbName = ActiveWorkbook.Name


Num = 0


Do While MyName <> ''


If MyName <> AWbName Then


Set Wb = Workbooks.Open(MyPath & '\' & MyName)


Num = Num 1


With Workbooks(1).ActiveSheet


.Cells(.Range('B65536').End(xlUp).Row 2, 1) = Left(MyName, Len(MyName) - 4)


For G = 1 To Sheets.Count


Wb.Sheets(G).UsedRange.Copy .Cells(.Range('B65536').End(xlUp).Row 1, 1)


Next


WbN = WbN & Chr(13) & Wb.Name


Wb.Close False


End With


End If


MyName = Dir


Loop


Range('B1').Select


Application.ScreenUpdating = True


MsgBox '共合并了' & Num & '个工作薄下的全部工作表。如下:' & Chr(13) & WbN, vbInformation, '提示'


End Sub


注意代码红色字体部分,根据自己的版本更改。


3
多个工作簿中的sheet1合并到新的工作簿中



多个工作簿中的表合并到一个工作簿中,不进行汇总,只是放到一个工作簿,保留原来的表名。


代码如下:


Sub 汇总数据()

Application.ScreenUpdating = False

 Dim wb, wb1 As Excel.Workbook

Dim sh As Excel.Worksheet

s = Split(ThisWorkbook.Name, '.')(1)


f = Dir(ThisWorkbook.Path & '\*' & s) '生成查找EXCEL的目录

Do While f <> '' '在目录中循环

If f <> ThisWorkbook.Name Then  '如果不是打开的工作簿


Set wb = Workbooks.Open(ThisWorkbook.Path & '\' & f)


wb.Worksheets('sheet1').Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)

ActiveSheet.Name = Split(wb.Name, '.')(0)

    wb.Close

    End If


    f = Dir

    Loop

ThisWorkbook.Worksheets('汇总').Activate

    Application.ScreenUpdating = True

End Sub


三种情况下的合并全在此了,不需要懂得VBA,只要复制上面代码运行下就OK了,方便吧!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多