工作中有时候需要将多张工作表合并到一张工作表,本文总结了四种方法:Power Query 工具、SQL、函数与公式、VBA,四种方法难度依次递增。
工作中有时候需要将多张工作表合并到一张工作表,本文总结了四种方法:Power Query 工具、SQL、函数与公式、VBA,四种方法难度依次递增。
有N多个以月份命名的excel工作表(为演示方便以6个为例),每张表字段名相同,现需要把表格全部合并到一个表中去。
工作表名:
图 1
每张表字段名:
图 2
方法一:借助Power Query工具
Power Query是Excel 2016标配的功能。下面我们看看怎么利用这个工具实现多表合并。
操作步骤如下:
Step1:点击菜单数据→新建查询→从文件→从工作簿,找到当前文件的位置并导入;
图 3
图 4
Step2:在打开的导航器,选择要合并的多个工作表,再点击“编辑”;
图 5
Step3:在打开的“查询编辑器”中点击“追加查询”,选择要合并的工作表,点击“确定”;
图 6
Step4:点击“关闭并上载”,瞬间生成了6张工作表,sheet1就是把6个月的报表合并后的汇总表,sheet2到sheet6是多余无用的表,点击sheet2,按住shift键选中sheet2到sheet6工作表,右键“删除”。
图 7
图 8
图 9
方法二:SQL
Step1:打开多表合并后需要存放的工作表,点击菜单数据→现有连接→浏览更多,找到需要合并的文件,点击“打开”:
图 10
Step2: 在选择表格页面点击“确定”,进入“导入数据”,点击“属性”,
图 11
图 12
Step3:在连接属性→定义→命令文本处输入SQL语句:
select "1月" as 月份, * from [1月$] union all
select "2月" as 月份, * from [2月$] union all
select "3月" as 月份, * from [3月$] union all
select "4月" as 月份, * from [4月$] union all
select "5月" as 月份, * from [5月$] union all
select "6月" as 月份, * from [6月$]
图 13
点击“确定”,返回图12界面,再点击“确定”,瞬间即把6张表汇总到一张表,
并且增加一个字段月份,部分数据截图如图:
图 14
如果不需要增加字段月份,SQL语句修改为:
select * from [1月$] union all
select * from [2月$] union all
select * from [3月$] union all
select * from [4月$] union all
select * from [5月$] union all
select * from [6月$]
如果月份更多,SQL语句可以在Excel中录入,录入1月的SQL语句,点击单元格右下角的黑色+,用鼠标往下拖动自动生成其他月份的SQL语句,删掉最后一个union all,再复制粘帖到记事本。
方法三:函数与公式
Step1:在汇总表输入字段名,A2单元格手工输入第一张工作表1月,点击单元格右下角+往下拖动到A7,如图15:
图 15
Step2:在B2单元格输入公式=INDIRECT($A2&"!"&ADDRESS(INT(ROW(A1)-1)/6+2,COLUMN(A1))),向右拖动公式,再向下拖动公式,得到
图 16
公式说明:
把/6中数字6修改为要合并的工作表实际个数。$A2是工作表名称所在列(本例是A列)
INT((ROW(A1)-1)/6)+2:目的是生成2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4..序列
ADDRESS():动态生成引用的单元格地址
Step3: 复制A:D列区域(如果有100张表就选取A2:D101),然后选取下面的空行粘贴即可完成全部数据提取。
如果工作表名称没规律怎么办?答案是用宏表函数,我的EXCEL书中第117招介绍了用宏表函数提取工作表名称。
方法四:VBA
打开汇总表,点击开发工具→查看代码,输入以下代码:
Option Explicit
Sub Test() '多工作表合并
Dim Ws As Worksheet, k%, SumWs As Worksheet, 最后&
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
图 17
图 18
按快捷键F5执行代码,瞬间完成多表合并。
扫一扫二维码,关注我的微信公众帐号,不断免费学习各种excel技巧。