启明办公

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 113|回复: 20

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

[复制链接]

2

主题

6

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-12-8 09:35:40 | 显示全部楼层 |阅读模式
11.24日更新小工具:

新手小伙伴如果觉得以上操作比较复杂,可以看下这篇文章,制作了一个小工具,点点鼠标就可以完成工作表、工作簿的汇总。
1、支持WPS/EXCEL混合表格的汇总
2、支持不同表头的表格汇总
3、支持多工作簿同名工作表分类汇总
<hr/>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
Next
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
Loop
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
End If
MyName = Dir
Loop
Application.ScreenUpdating = True
MsgBox "已完成"
End Sub方法三 Power Query

依次点击【数据】—【获取数据】—【自文件】—【从文件夹】,选中需要合并的文件夹,点击【打开】,最后点击【转换数据】。



进入Power Query编辑界面,点击【Content】列,这里选择【参数1】,点击【确定】。



接着点击【Data】列扩展数据,点击【确定】,完成工作簿的合并,针对不需要的列可以右键删除,最后关闭并上载数据到Excel表格即可。


Windows 批处理适用于CSV文件,VBA适用于任意版本(如果Excel是2007以前版本,需要将代码中的XLSX修改成XLS)、Power Query适用于高版本Excel,各有所长
镜像表格拆分篇:

小结

Excel工作表、工作簿的合并小技巧分享给大家,希望对你有所帮助。
回复

使用道具 举报

2

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-8 09:35:47 | 显示全部楼层
谢谢!使用你的方法2,成功处理了一件101个sheet合并的任务
回复

使用道具 举报

0

主题

8

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-12-8 09:36:34 | 显示全部楼层
这个利用vbs合并后,居然会漏掉一些表,没有合并?改了表名字也合并不了,请问是怎么回事呢?
回复

使用道具 举报

2

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-8 09:37:14 | 显示全部楼层
要看具体情况[捂脸]
回复

使用道具 举报

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-8 09:38:03 | 显示全部楼层
谢谢答主,多个工作簿合并一张表的那个,我用c#写了半天,结果引用的时候老是出错,循环索引还要自己写,没想到这个windows批处理这么神奇![赞同]
回复

使用道具 举报

0

主题

5

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-8 09:38:27 | 显示全部楼层
合并表格怎么只合并一个,我是Excel初学者
回复

使用道具 举报

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-12-8 09:38:47 | 显示全部楼层
请问有方法让多个工作簿的同名工作表分别进行各自合并的办法吗?
回复

使用道具 举报

1

主题

6

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-8 09:39:04 | 显示全部楼层
没汇成功呀
回复

使用道具 举报

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-8 09:39:52 | 显示全部楼层
MARK
回复

使用道具 举报

0

主题

9

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-8 09:40:37 | 显示全部楼层
VBA合并工作簿能不能详细讲一下,成功不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|启明办公

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4

快速回复 返回顶部 返回列表