多个工作簿、多个工作表合并

我的第2版Excel新书《Excel职场手册:260招菜鸟变达人》5月10日出版啦,比第1版增加了很多内容,操作动画和视频共100个,定价不变,非常超值。

示例文件、操作动画和视频也可以到我的微云上下载,链接地址 http://url.cn/51t8vU7

购书网址:

京东网:http://item.jd.com/12072001.html

当当网:http://product.dangdang.com/25073253.html

亚马逊:https://www.amazon.cn/dp/B0711DZB44

人民邮电出版社异步社区 :http://www.epubit.com.cn/book/details/4766

天猫:https://detail.tmall.com/item.htm?

spm=a220m.1000858.1000725.171.10JReA&id=550004809791&user_id=2049420857&cat_id=2&is_b=1&rn=64312a65425de0826a7ab9b7af05f609

今日分享如下(建议收藏):

工作簿是处理和存储数据的文件,每个工作簿可以包含多张工作表。今天给大家分享多个工作簿合并到一个工作簿多张工作表、多个工作簿合并到一个工作簿一张工作表、多个工作表合并到一个工作表批量合并方法。

一、多个工作簿合并到一个工作簿多张工作表

工作中有时需要将多个工作簿中数据(每个工作簿只有一张工作表)合并到一个工作簿中,方便统计和保存,保留原来Excel工作簿中的名称和结构。如果量少,只有少数几个文件,可以打开一个个复制,若有几十个甚至上百个Excel文件要合并到一个工作簿中,就需要批量处理多个工作簿的合并。步骤如下:

Step1、将需要合并的Excel工作簿放在一个文件夹中;

Step2、在该文件夹中新建一个工作簿;

Step3、打开新建立的Excel工作簿,按下Alt+F11组合键,在Visual Basic编辑器中选择“插入→模块”,在代码窗口输入以下代码,点击菜单栏运行,运行子过程/用户窗体,弹出需要合并的文件,关闭代码输入窗口。打开Excel工作簿,可以看到将选中的工作簿中的工作表都复制到了新建工作簿中。

Sub Books2Sheets()

'定义对话框变量

Dim fd As FileDialog

Set fd = Application.FileDialog(msoFileDialogFilePicker)

'新建一个工作簿

Dim newwb As Workbook

Set newwb = Workbooks.Add

With fd

If .Show = -1 Then

'定义单个文件变量

Dim vrtSelectedItem AsVariant

'定义循环变量

Dim i As Integer

i = 1

'开始文件检索

For Each vrtSelectedItemIn .SelectedItems

'打开被合并工作簿

Dim tempwb AsWorkbook

Set tempwb =Workbooks.Open(vrtSelectedItem)

'复制工作表

tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)

'把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsx

newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".xls","")

'关闭被合并工作簿

tempwb.CloseSaveChanges:=False

i = i + 1

Next vrtSelectedItem

End If

End With

Set fd = Nothing

End Sub

二、多个工作簿合并到一个工作簿一张工作表

工作中有时候需要把多个工作簿合并到一个工作簿的一张工作表,操作步骤如上节内容一样,只需把代码修改如下:

Sub 合并汇总()

Application.DisplayAlerts= False

Application.ScreenUpdating= False

FileToOpen_N =Application.GetOpenFilename("xlsx文件,*.xlsx", _

Title:="请选择要合并工作簿", MultiSelect:=True)

Newbz = 0

On Error ResumeNext

For EachFileToOpen In FileToOpen_N

If FileToOpen<> False Then

If Newbz = 0 Then

Booknum =Application.SheetsInNewWorkbook

Application.SheetsInNewWorkbook= 1

Workbooks.Add

Application.SheetsInNewWorkbook= Booknum

NewBookName =ActiveWorkbook.Name

Sheets(1).Name ="sheet_tmp"

Newbz = 1

End If

Set OpenBook =Workbooks.Open(FileToOpen)

For Each XlsheetIn OpenBook.Sheets

Xlsheet.CopyBefore:=Workbooks(NewBookName).Sheets("sheet_tmp")

Next

OpenBook.CloseSaveChanges:=False

End If

Next

Workbooks(NewBookName).Sheets("sheet_tmp").Delete

Application.ScreenUpdating= True

Application.DisplayAlerts= True

Dim sht AsWorksheet, lstRowZb As Integer, lstRow As Integer

'lstRowZb:总表的lastrow

Worksheets("1").Select

Worksheets("1").Range("a1:h1").CopyDestination:=Range("a1")

'复制表头

For Each sht InWorksheets

lstRowZb =Range("a1048576").End(xlUp).Row '每次COPY前取总表的最后一行

With sht

If .Name <>"1" Then

lstRow =.Range("a1048576").End(xlUp).Row

.Range("a2:h"& lstRow).Copy Destination:=Cells(lstRowZb + 1, "a")

End If

End With

Next sht

End Sub

三、多个工作表合并到一张工作表

打开汇总表,点击开发工具→查看代码,输入以下代码:

Option Explicit

Sub Test() '多工作表合并

Dim Ws As Worksheet, k%, SumWs AsWorksheet, 最后&

Set SumWs = Sheets("总表")

For Each Ws In Sheets

If Ws.Name <> "总表" Then

k = k + 1

If k = 1 Then

'复制表头

Ws.Range("A1").CurrentRegion.Copy SumWs.[A1]

Else

'不复制表头

最后 = SumWs.Cells(Rows.Count, 1).End(xlUp).Row + 1

Ws.Range("A1").CurrentRegion.Offset(1, 0).Copy SumWs.Cells(最后, 1)

End If

End If

Next Ws

End Sub

(0)

相关推荐