ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: LMY123

[讨论] 万帖成专家之拆分

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 08:41 | 显示全部楼层
1-10 PDF按页拆分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 08:42 | 显示全部楼层
本帖最后由 LMY123 于 2018-12-21 08:48 编辑

2-1 一行拆分成多行

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 08:42 | 显示全部楼层
本帖最后由 LMY123 于 2018-12-21 08:48 编辑

3-1 一列拆分成多列

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 08:44 | 显示全部楼层
本帖最后由 LMY123 于 2018-12-21 08:48 编辑

4-1 拆分成工作表

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 16:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 16:52 | 显示全部楼层
本帖最后由 LMY123 于 2018-12-22 09:19 编辑

1-12  A列拆分成文件夹_同时B列拆分成工作薄(字典法,ADO法)'http://club.excelhome.net/thread-1452244-1-1.html
Sub A列拆分成文件夹_同时B列拆分成工作薄_COPY_双字典() ''已入VBA代码宝库'
    Dim fs As New FileSystemObject
    路径 = ThisWorkbook.Path & "\"
    Set 等待拆分表 = ThisWorkbook.Sheets(1)
    Set 夹字典 = CreateObject("scripting.dictionary")
    Set 薄字典 = CreateObject("scripting.dictionary")
    源数组 = Range("a1").CurrentRegion
    ReDim 结果数组(1 To UBound(源数组), 1 To UBound(源数组, 2))
    For 行 = 2 To UBound(源数组)
        If Not 夹字典.Exists(源数组(行, 1)) Then '新建文件夹
            夹字典(源数组(行, 1)) = ""
            If Not fs.FolderExists(路径 & 源数组(行, 1)) Then fs.CreateFolder (路径 & 源数组(行, 1))
        End If
        夹薄拆分列 = 源数组(行, 1) & "," & 源数组(行, 2)
        薄字典(夹薄拆分列) = 薄字典(夹薄拆分列) & "," & 行
    Next 行
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Application.SheetsInNewWorkbook = 1
    For Each 薄字典关键字 In 薄字典.Keys
        薄字典关键字拆分数组 = Split(薄字典关键字, ",")
        y = Split(薄字典(薄字典关键字), ",")
        For i = 1 To UBound(y)
            For 列 = 1 To UBound(源数组, 2)
                结果数组(i, 列) = 源数组(y(i), 列)
            Next 列
        Next i
        等待拆分表.Copy
        With ActiveWorkbook
            .Sheets(1).UsedRange.Offset(1, 0).ClearContents
            .Sheets(1).Range("a2").Resize(UBound(y), UBound(结果数组, 2)) = 结果数组
            .SaveAs Filename:=路径 & 薄字典关键字拆分数组(0) & "\" & 薄字典关键字拆分数组(1) & ".xlsx" '另存为工作簿
            .Close 0
        End With
    Next 薄字典关键字
    Application.SheetsInNewWorkbook = 3
    Application.DisplayAlerts = True: Application.ScreenUpdating = True
End Sub
Sub A列拆分成文件夹_同时B列拆分成工作薄_UNION_单字典() ''已入VBA代码宝库'
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Set 字典 = CreateObject("scripting.dictionary")
    With Worksheets("sheet1")
        源行数 = .Cells(.Rows.Count, 1).End(xlUp).Row
        源数组 = .Range("a1:d" & 源行数)
        For 行 = 2 To UBound(源数组)
            If Not 字典.Exists(源数组(行, 1)) Then
                Set 字典(源数组(行, 1)) = CreateObject("scripting.dictionary")
            End If
            If Not 字典(源数组(行, 1)).Exists(源数组(行, 2)) Then
                Set 字典(源数组(行, 1))(源数组(行, 2)) = .Range("a1:d1")
            End If
            Set 字典(源数组(行, 1))(源数组(行, 2)) = Union(字典(源数组(行, 1))(源数组(行, 2)), .Cells(行, 1).Resize(1, 4))
        Next 行
    End With
    路径 = ThisWorkbook.Path & "\"
    Application.SheetsInNewWorkbook = 1
    For Each 夹关键字 In 字典.Keys
        If Dir(路径 & 夹关键字, vbDirectory) = "" Then
            MkDir 路径 & 夹关键字
        End If
        For Each 薄表关键字 In 字典(夹关键字).Keys
            Set 新生薄 = Workbooks.Add
            With 新生薄
                With .Worksheets(1)
                    .Name = 薄表关键字
                    字典(夹关键字)(薄表关键字).Copy .Range("a1")
                End With
                .SaveAs Filename:=路径 & 夹关键字 & "\" & 薄表关键字
                .Close False
            End With
        Next 薄表关键字
    Next 夹关键字
    Application.ScreenUpdating = True
End Sub
'http://club.excelhome.net/thread-1003488-2-1.html
Sub A列拆分成文件夹_同时B列拆分成工作薄_ADO法() ''已入VBA代码宝库'
    夹数组 = Range("A1", [A1].End(2))
    Set 连接 = CreateObject("Adodb.Connection")
    连接.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    Sql = "Select Distinct 乡办 From [Sheet1$] Where 乡办<>''"
    夹记录数组 = 连接.Execute(Sql).getrows
    Application.ScreenUpdating = False
    For 夹行 = 0 To UBound(夹记录数组, 2)
        MkDir ThisWorkbook.Path & "\" & 夹记录数组(0, 夹行)
        Sql = "Select Distinct 村居 From [Sheet1$] Where 乡办='" & 夹记录数组(0, 夹行) & "'"
        薄记录数组 = 连接.Execute(Sql).getrows
        For 薄行 = 0 To UBound(薄记录数组, 2)
            Set 新生薄 = Workbooks.Add
            新生薄.Sheets(1).[A1].Resize(1, UBound(夹数组, 2)) = 夹数组
            Sql = "Select * From [Sheet1$] Where 村居+乡办='" & 薄记录数组(0, 薄行) & 夹记录数组(0, 夹行) & "'"
            新生薄.Sheets(1).[A2].CopyFromRecordset 连接.Execute(Sql)
            新生薄.SaveAs ThisWorkbook.Path & "\" & 夹记录数组(0, 夹行) & "\" & 薄记录数组(0, 薄行) & ".xlsx"
            新生薄.Close
        Next
    Next
    Application.ScreenUpdating = True
    连接.Close: Set 连接 = Nothing
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 17:53 | 显示全部楼层
本帖最后由 LMY123 于 2018-12-22 09:13 编辑

1-13  A列拆分成薄_同时B列拆分成表_双字典法'http://club.excelhome.net/forum.php?mod=viewthread&tid=1393893
Sub A列拆分成薄_同时B列拆分成表_双字典法() ''已入VBA代码宝库'
    Application.DisplayAlerts = False: Application.ScreenUpdating = False
    Dim Fso As Object, 等待拆分表 As Worksheet, 源数组(), 结果数组(), 标题行数组(), 函数 As WorksheetFunction
    Set 薄字典 = CreateObject("Scripting.Dictionary"): Set 表字典 = CreateObject("Scripting.Dictionary"): Set Fso = CreateObject("Scripting.Filesystemobject"): Set 函数 = WorksheetFunction
    路径 = ThisWorkbook.Path & "\": Set 等待拆分表 = ThisWorkbook.Sheets("数据"): Fso.CreateFolder (路径 & "文件夹\")
    源数组 = 等待拆分表.Range("a1").CurrentRegion: 标题行数组 = 等待拆分表.Range("a1").Resize(1, UBound(源数组, 2))
    For 行 = 2 To UBound(源数组)
        薄字典(源数组(行, 1)) = ""
    Next 行
    For Each 薄关键字 In 薄字典.Keys
        表字典.RemoveAll
        For 行 = 2 To UBound(源数组)
            If 薄关键字 = 源数组(行, 1) Then
                表字典(源数组(行, 2)) = ""
            End If
        Next 行
        Set 新生薄 = Workbooks.Add
        For Each 表关键字 In 表字典.Keys
            计数器 = 0
            For 行 = 2 To UBound(源数组)
                If 薄关键字 & 表关键字 = 源数组(行, 1) & 源数组(行, 2) Then
                    计数器 = 计数器 + 1
                    ReDim Preserve 结果数组(1 To UBound(源数组, 2), 1 To 计数器)
                    For 列 = 1 To UBound(源数组, 2)
                        结果数组(列, 计数器) = 源数组(行, 列)
                    Next 列
                End If
            Next 行
            新生薄.Sheets.Add after:=新生薄.Sheets(新生薄.Sheets.Count)
            新生薄.Sheets(新生薄.Sheets.Count).Name = 表关键字
            Set sht = 新生薄.Sheets(新生薄.Sheets.Count)
            sht.Range("a1").Resize(1, UBound(源数组, 2)) = 标题行数组
            sht.Range("a2").Resize(计数器, UBound(源数组, 2)) = 函数.Transpose(结果数组)
        Next 表关键字
        新生薄.Sheets(1).Delete: 新生薄.SaveAs 路径 & "文件夹\" & 薄关键字 & ".xlsx": 新生薄.Close
    Next
    Application.DisplayAlerts = True: Application.ScreenUpdating = True
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-21 19:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-12-21 19:59 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-12-21 20:28 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 14:20 , Processed in 0.042704 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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