怎么将多个表格里的数据复制到一张表上

很多的表格,格式是一样的,每张表个里就一个工作簿,我要将这些表格里的数据汇总到一张表格上。一张一张复制太慢了,大神们速速来解决下吧

建议你下载一个Excel必备工具箱,安装成功后会在Excel文件菜单上生成一个“工具箱”。第一步:将多个工作簿内的每一张表合并到一个工作簿:点工具箱→工具集锦→汇总→文件合并→确定→选中你需要合并的所有文件(鼠标左键点需要合并的第一个文件,然后按Shift不松,鼠标左键点需要合并的最后一个文件)→上移、下移调整好位置→确定。第二步:将一个工作薄内多个工作表合并:点工具箱→工具集锦→汇总→表格合并→确定→来自当前文档→请指定处理范围(根据你表格的具体情况设置)→确定→指定数据来源(按你的要求将需要合并的表格打钩→确定

用宏可以解决。
确保这些文件在一个文件夹,且若打开某一文件,数据就能看见——即不用点其他sheet。建一新Excel,也存到该文件夹。仅打开该新Excel,同时按Alt+F11,点菜单的插入,模块,粘贴如下代码:

Sub Find()
Application.ScreenUpdating = False
Dim MyDir As String
MyDir = ThisWorkbook.Path & "\"
ChDrive Left(MyDir, 1) 'find all the excel files
ChDir MyDir
Match = Dir$("*.xls")
Do
If Not LCase(Match) = LCase(ThisWorkbook.Name) Then
Workbooks.Open Match, 0 'open
ActiveSheet.UsedRange.Copy thisdocument.Sheets(1).Range("A60000").End(xlUp).Offset(1, 0)
Windows(Match).Activate
ActiveWorkbook.Close 0
End If
Match = Dir$
Loop Until Len(Match) = 0
Application.ScreenUpdating = True
End Sub

在此界面直接按F5运行此宏,所有数据都复制到了这个新工作簿里。剩下的事情自己处理吧。追问

出错了!ActiveSheet.UsedRange.Copy thisdocument.Sheets(1).Range("A60000").End(xlUp).Offset(1, 0)这一条

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-14
打开汇总表,alt + F11,插入模块,将下面代码复制进行,按F5,选择你需要合并的文件点击确定就OK了!
Sub CombineWorkbooks()
Dim FilesToOpen, ft
Dim x As Integer
Application.ScreenUpdating = False
On Error GoTo errhandler
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Micrsofe Excel文件(*.xls;*.xlsx), *.xls;*.xlsx", _
MultiSelect:=True, Title:="要合并的文件")
If TypeName(FilesToOpen) = "boolean" Then
MsgBox ("没有选定文件")
End If
x = 1
Do While x <= UBound(FilesToOpen)
Set wk = Workbooks.Open(Filename:=FilesToOpen(x))
wk.Sheets(1).Move after:=ThisWorkbook.Sheets _
(ThisWorkbook.Sheets.Count)
x = x + 1
Loop
MsgBox ("合并成功完成!")
errhandler:
End Sub追问

我用了下,一下子把我要的表都打开了,电脑直接死机,能改良下吗

追答

追加语句wk.close savechanges:=false,把打开的文件关闭

Sub CombineWorkbooks()
Dim FilesToOpen, ft
Dim x As Integer
Application.ScreenUpdating = False
On Error GoTo errhandler
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Micrsofe Excel文件(*.xls;*.xlsx), *.xls;*.xlsx", _
MultiSelect:=True, Title:="要合并的文件")
If TypeName(FilesToOpen) = "boolean" Then
MsgBox ("没有选定文件")
End If
x = 1
Do While x <= UBound(FilesToOpen)
Set wk = Workbooks.Open(Filename:=FilesToOpen(x))
wk.Sheets(1).Move after:=ThisWorkbook.Sheets _
(ThisWorkbook.Sheets.Count)
wk.close savechanges:=false
x = x + 1
Loop
Application.ScreenUpdating = true
MsgBox ("合并成功完成!")
errhandler:
End Sub

追问

提示是合并完成了,我的汇总表里啥也没有

追答

不好意思,想确认下,你要求的数据汇总,是将你选定的文件中的工作表移动到汇总表,还是需要将你选定的工作表内容复制到汇总表的工作表中??

追问

复制过来就可以了

追答Sub CombineWorkbooks()
        Dim FilesToOpen, ft
        Dim x As Integer
        Application.ScreenUpdating = False
        On Error GoTo errhandler
        FilesToOpen = Application.GetOpenFilename _
        (FileFilter:="Micrsofe Excel文件(*.xls;*.xlsx), *.xls;*.xlsx", _
        MultiSelect:=True, Title:="要合并的文件")
        If TypeName(FilesToOpen) = "boolean" Then
            MsgBox ("没有选定文件")
        End If
        x = 1
        Do While x <= UBound(FilesToOpen)
           Set wk = Workbooks.Open(Filename:=FilesToOpen(x))
           wksh = wk.Sheets.Count
            wk.Sheets(1).Move after:=ThisWorkbook.Sheets _
           (ThisWorkbook.Sheets.Count)
           If wksh <> 1 Then wk.Close savechanges:=False
            x = x + 1
        Loop
       Application.ScreenUpdating = True
        MsgBox ("合并成功完成!")
errhandler:
    End Sub

语句加了判断 wksh = wk.Sheets.Count,当你的表格数大于1的时候就自动关闭打开的文件。

你的文件默认工作表估计是1个,所以操作时你的工作表被移走,实际上已经关闭,所以语句执行再去关闭就退出程序了。现在在试试!

语句加了判断

追问

还是什么都没有,就是图片中8.16.xlsx一直到10.13xlsx

,复制到一起,成为8.16-10.13.xlsx

追答

你把我上传的文件下载后解压,执行base文件,点合并,选择文件夹中1-6的文件,执行看看

追问

我是要把这些表里的数据汇总到一个sheet,不是变成一个表里好多sheet

追答

晕,上面问了你没说,确认下马上帮你改。
你的工作表数据是否包含表头,复制是否连表头一起复制!

追问

不复制表头,是有表头的

追答

不好意思,再确认下,汇总表原来就有表头? 每个表的表头都是第一行吧?

追问

恩,他们的格式都是一样的,表头是有2行的

追答本回答被提问者采纳
第2个回答  2013-10-14
上传文件或者加57321522
相似回答