首发于 Excel技巧
史上最全!Excel 如何合并多个工作表或多个工作簿?

史上最全!Excel 如何合并多个工作表或多个工作簿?

Excel表格的合并分为两种情况, 一种是工作表合并、一种是工作簿合并

一个Excel表格叫做工作簿,每个工作簿中的Sheet叫做工作表


针对这两种情况的表格合并,今天我们来做个小结,看看都要哪些方法。

不管你是高版本Excel还是低版本Excel,总有一种方法适合你。

当然这里不考虑极端的情况,如工作表/工作簿表头不一致、列数不同等,这里 默认需要合并的工作表/工作簿表头都是一致的

工作表的合并

工作表的合并,顾名思义,合并同一工作簿下所有Sheets的数据,针对数据的多少,有不同的方法。


方法一 剪贴板法

如果需要合并的数据比较少,这里可以利用剪贴板。

首先调出Excel剪贴板,它在开始功能区的最左边。


接着选中第一个sheet的内容,按 CTRL+X 快捷键,将sheet1内的所有内容剪切到剪贴板中,同样的操作,将所有sheet的内容,全部CTRL+X剪切到剪贴板。

全部剪切完成,在新建的sheet中,点击左侧剪贴板中的“全部粘贴”按钮,完成工作表的合并。

方法二 VBA法

不需要看懂代码,将代码复制粘贴到需要合并的工作簿中来,运行即可,表格合并完成。

Alt+F11 两键,调出Visual Basic 界面,在左侧窗口中,右键选择 “插入”—“模块” ,将代码粘贴进去,点击运行按钮,完成数据表合并。


明细代码如下所示( 直接复制可用 ):

Sub 合并当前工作簿下的所有工作表()
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set st = Worksheets.Add(before:=Sheets(1))
st.Name = "合并"
For Each shet In Sheets:
If shet.Name <> "合并" Then
i = st.Range("A" & Rows.Count).End(xlUp).Row + 1
shet.UsedRange.Copy
st.Cells(i, 1).PasteSpecial Paste:=xlPasteAll
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "已完成"
End Sub

方法三 Power Query

Power Query是 Excel2016及其以上才有的功能 ,如果你的Excel版本较低,强烈建议安装较高版本的,可看历史文章,有详细的安装教程。


依次点击 【数据】—【获取数据】—【自文件】—【从工作簿】 ,选中需要合并的工作簿,点击【导入】。


之后进入到导航器界面,选中文件夹,点击【 转换数据 】。


进入Power Query编辑界面,取消勾选不需要的表名,之后点击 Data列 扩展数据,点击确定,完成数据表的合并,最后一步,点击左上角的“ 关闭并上载 ”即可将数据加载到Excel当中去。

剪贴板法适合少量表格的合并,VBA方法适合任意版本的Excel版本的数据合并,Power Query法只适合Excel2016及以上版本,如果其它版本想用这个功能,需要单独下载插件

工作簿的合并

工作簿的合并指合并在同一个文件下下所有的Excel工作簿。

方法一 Windows 批处理命令

首先我们需要将Excel表格文件另存为CSV文件,这一步可以通过VBA批量操作。

打开任意工作簿,调出Visual Basic 界面,输入以下代码(如何插入代码上面有介绍,这里不再赘述)

Sub xlsxtocsv()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
t = ActiveWorkbook.Name
mypath = ActiveWorkbook.Path & "\"
myfile = Dir(mypath & "*.xlsx")
Do Until Len(myfile) = 0
If myfile <> t Then
    Workbooks.Open Filename:=mypath & myfile
    ActiveWorkbook.SaveAs Filename:=mypath & Left(myfile, InStr(myfile, ".") - 1) & ".csv", FileFormat:=xlCSV
End If
If myfile <> t Then ActiveWorkbook.Close
myfile = Dir
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

执行完毕后,将会将每一个表格生成一份csv文件。


接着新建一个txt文本文档,在其中输入: copy *.csv all.csv


之后保存文件,将文件后缀名修改为 bat 文件;或者另存为,另存为界面需要注意两点:

第一点: 文件名记得带.bat的后缀 ;第二点: 保存类型选择【所有文件】


点击确定,就会出现一个可执行文件,类型为【 windows批处理文件 】。

双击此文件之后,当前文件夹内的所有csv文件全部被合并在一起。

此方法只适用于csv文件,不适用于xls/xlsx文件(也就是Excel表格),所以我们在第一步,将所有的Excel文件转化成csv格式

方法二 VBA法

VBA运行方法都是一致的。

新建一个工作簿,打开,进入Visual Basic 界面,输入以下代码 ,点击运行,等待程序完成之后,工作簿完成合并。

Sub 合并当前目录下所有工作簿()
Dim Wb As Workbook
Application.ScreenUpdating = False
MyPath = ActiveWorkbook.Path
MyName = Dir(MyPath & "\" & "*.xlsx")
AWbName = ActiveWorkbook.Name
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
c = ThisWorkbook.Sheets("sheet1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
If c = 1 Then   '防止合并的工作簿第一行空着
c = 0
End If
ActiveSheet.UsedRange.Copy ThisWorkbook.Sheets("sheet1").Cells(c + 1, 1)  '合并工作簿的第一个sheet名字为:sheet1
Wb.Close False