ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5064|回复: 16

[求助] 多个相同工作表的工作簿如何快速拆分后组合成新的工作簿?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-5-19 17:33 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yschaizhen 于 2016-5-19 18:20 编辑

附件数据文件夹中有茶盘、蓼叶、通天、西桥4个工作薄(实际可能上百个) , 每工作簿中有报表1、报表2、报表3、 报表 4四张工作表, 如何快速把这4个工作簿按工作表拆分并 生成 成结果文件夹中的工作薄。

数据.rar

198.19 KB, 下载次数: 41

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-5-19 18:00 | 显示全部楼层
希望在线的老师帮助,谢谢!!!!

TA的精华主题

TA的得分主题

发表于 2016-5-20 07:49 | 显示全部楼层
yschaizhen 发表于 2016-5-19 18:00
希望在线的老师帮助,谢谢!!!!

思路:1.如果报表只有4个的话,可以先建4个空工作薄:报表1---报表4
2.打开报表1,将数据工作簿的所有报表1汇总

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-5-20 09:31 | 显示全部楼层
cqlpjxx 发表于 2016-5-20 07:49
思路:1.如果报表只有4个的话,可以先建4个空工作薄:报表1---报表4
2.打开报表1,将数据工作簿的所有报 ...

老师我的报表有上百个, 你的思路太费时了, 能写点代码帮我一下吗?

TA的精华主题

TA的得分主题

发表于 2016-5-20 09:45 | 显示全部楼层
'在数据目录下,新一个excel文件,执行如下代码
Sub zz()
    Dim myPath$, myFile$, Aiv As Workbook, sh1, j, brr, Aiv2 As Workbook
    Application.DisplayAlerts = False  '关闭提示窗
    Application.ScreenUpdating = False
    On Error Resume Next
    For Each sh1 In ThisWorkbook.Sheets
        brr = sh1.Range("A2:H" & sh1.Range("A65536").End(3).Row)
        myPath = ThisWorkbook.Path & "\"       '把文件路径定义给变量
        myFile = Dir(myPath & "*.xls")            '依次找寻指定路径中的*.xls文件
        Do While myFile <> ""                     '当指定路径中有文件时进行循环

            If myFile <> ThisWorkbook.Name Then
                Set Aiv = Workbooks.Open(myPath & myFile)         '打开符合要求的文件
                Dim arr, m, i, sh
                For Each sh In Aiv.Sheets
                    Set Aiv2 = Workbooks.Open(myPath & "结果\" & sh.Name & ".xlsx")   '打开结果文件
                    sh.Copy After:=Aiv2.Sheets(1)           '复制工作表
                    Aiv2.Sheets(sh.Name).Name = Aiv.Name   '改表名
                    Aiv2.Close True  '关闭工作簿
                Next
                Workbooks(myFile).Close False              '关闭源工作簿
            End If
            myFile = Dir           '找寻下一个*.xls文件
            MsgBox myFile
        Loop
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-5-20 10:42 | 显示全部楼层
cqlpjxx 发表于 2016-5-20 09:45
'在数据目录下,新一个excel文件,执行如下代码
Sub zz()
    Dim myPath$, myFile$, Aiv As Workbook, s ...

按老师的方法执行代码后, 每打开一个工作薄要点击一下确定,结果文件夹中也没有生成报表1-报表4四个工作薄,麻烦老师看看。

TA的精华主题

TA的得分主题

发表于 2016-5-20 13:03 | 显示全部楼层
yschaizhen 发表于 2016-5-20 10:42
按老师的方法执行代码后, 每打开一个工作薄要点击一下确定,结果文件夹中也没有生成报表1-报表4四个工作 ...

'修改了一下代码,请测试
Sub zz()
    Dim myPath$, myFile$, Aiv As Workbook, i, sh, Aiv2 As Workbook
    Application.DisplayAlerts = False  '关闭提示窗
    Application.ScreenUpdating = False
    On Error Resume Next
    brr = sh1.Range("A2:H" & sh1.Range("A65536").End(3).Row)
    myPath = ThisWorkbook.Path & "\"       '把文件路径定义给变量
    myFile = Dir(myPath & "*.xls")            '依次找寻指定路径中的*.xls文件
    For i = 1 To 4
        Workbooks.Add
        ActiveWorkbook.SaveAs Filename:= _
                              myPath & "结果\报表" & i & ".xlsx"
    Next

    Do While myFile <> ""                    '当指定路径中有文件时进行循环
        If myFile <> ThisWorkbook.Name Then
            Set Aiv = Workbooks.Open(myPath & myFile)         '打开符合要求的文件

            For Each sh In Aiv.Sheets
                Set Aiv2 = Workbooks(sh.Name & ".xlsx")
                sh.Copy After:=Aiv2.Sheets(1)           '复制工作表
                Aiv2.Sheets(sh.Name).Name = Aiv.Name   '改表名
                '
            Next
            Workbooks(myFile).Close False              '关闭源工作簿
        End If
        myFile = Dir           '找寻下一个*.xls文件
    Loop
    For i = 1 To 4
        Workbooks("报表" & i & ".xlsx").Close True    '关闭保存工作簿
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

TA的精华主题

TA的得分主题

发表于 2016-5-20 13:06 | 显示全部楼层
请测试......................................

数据.rar

78.16 KB, 下载次数: 47

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-5-20 15:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cqlpjxx 发表于 2016-5-20 13:06
请测试......................................

谢谢老师,经测试还有以下问题, 1、 新生成的工作簿的工作表名称多了xls, 2、多了Sheet1-Sheet3三个空表,3、 如果数据工作表中某个工作薄还有报表5或报表6,拆分后不能新生成报表5或报表6工作薄。
麻烦老师再修改一下,谢谢。

TA的精华主题

TA的得分主题

发表于 2016-5-20 17:11 | 显示全部楼层
yschaizhen 发表于 2016-5-20 15:25
谢谢老师,经测试还有以下问题, 1、 新生成的工作簿的工作表名称多了xls, 2、多了Sheet1-Sheet3三个空表 ...

Sub zz()
    Dim myPath$, myFile$, Aiv As Workbook, i, n, m, sh, Aiv2 As Workbook
    Application.DisplayAlerts = False  '&sup1;&Oslash;±&Otilde;&Igrave;á&Ecirc;&frac34;&acute;°
    Application.ScreenUpdating = False
    On Error Resume Next
    brr = sh1.Range("A2:H" & sh1.Range("A65536").End(3).Row)
    myPath = ThisWorkbook.Path & "\"       '°&Ntilde;&Icirc;&Auml;&frac14;&thorn;&Acirc;·&frac34;&para;&para;¨&Ograve;&aring;&cedil;&oslash;±&auml;&Aacute;&iquest;
    myFile = Dir(myPath & "*.xls")            '&Ograve;&Agrave;&acute;&Icirc;&Otilde;&Ograve;&Ntilde;°&Ouml;&cedil;&para;¨&Acirc;·&frac34;&para;&Ouml;&ETH;&micro;&Auml;*.xls&Icirc;&Auml;&frac14;&thorn;
          n = 0
        Do While myFile <> ""                    '&micro;±&Ouml;&cedil;&para;¨&Acirc;·&frac34;&para;&Ouml;&ETH;&Oacute;&ETH;&Icirc;&Auml;&frac14;&thorn;&Ecirc;±&frac12;&oslash;&ETH;&ETH;&Ntilde;&shy;&raquo;·
        If myFile <> ThisWorkbook.Name Then
            Set Aiv = Workbooks.Open(myPath & myFile)         '&acute;ò&iquest;&ordf;·&ucirc;&ordm;&Iuml;&Ograve;&ordf;&Ccedil;ó&micro;&Auml;&Icirc;&Auml;&frac14;&thorn;
            m = Aiv.Sheets.Count
            If m > n Then
            For i = n + 1 To m
             Workbooks.Add
             ActiveWorkbook.SaveAs Filename:= _
                              myPath & "&frac12;á&sup1;&ucirc;\±¨±í" & i & ".xlsx"
            Next
            n = m
            End If
           
            For Each sh In Aiv.Sheets
                Set Aiv2 = Workbooks(sh.Name & ".xlsx")
                sh.Copy After:=Aiv2.Sheets(1)           '&cedil;&acute;&Ouml;&AElig;&sup1;¤×÷±í
                Aiv2.Sheets(sh.Name).Name = Mid(Aiv.Name, 1, Len(Aiv.Name) - 4) '&cedil;&Auml;±í&Atilde;&ucirc;
                '
            Next
            Workbooks(myFile).Close False              '&sup1;&Oslash;±&Otilde;&Ocirc;&acute;&sup1;¤×÷&sup2;&frac34;
        End If
        myFile = Dir           '&Otilde;&Ograve;&Ntilde;°&Iuml;&Acirc;&Ograve;&raquo;&cedil;&ouml;*.xls&Icirc;&Auml;&frac14;&thorn;
    Loop
    For i = 1 To n
        Workbooks("±¨±í" & i & ".xlsx").Sheets("Sheet1").Delete
        Workbooks("±¨±í" & i & ".xlsx").Sheets("Sheet2").Delete
        Workbooks("±¨±í" & i & ".xlsx").Sheets("Sheet3").Delete
        Workbooks("±¨±í" & i & ".xlsx").Close True    '&sup1;&Oslash;±&Otilde;±&pound;&acute;&aelig;&sup1;¤×÷&sup2;&frac34;
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 02:44 , Processed in 0.043657 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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