ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 拆分工具之六

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-29 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师,可否实现标题行是前面几列,然后按照行去拆分?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-29 18:07 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
rainniecc 发表于 2021-1-29 17:13
老师,可否实现标题行是前面几列,然后按照行去拆分?

拆分后你只需要前几列?你可以去下载另一个拆分工具

TA的精华主题

TA的得分主题

发表于 2021-2-2 08:33 | 显示全部楼层
3190496160 发表于 2021-1-29 18:07
拆分后你只需要前几列?你可以去下载另一个拆分工具

我的意思是我们现有工具都是按列拆分,可以按行拆分吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-2 12:51 | 显示全部楼层
rainniecc 发表于 2021-2-2 08:33
我的意思是我们现有工具都是按列拆分,可以按行拆分吗?

这个得见到你的文件,要看具体的表格结构而定,
实现标题行是前面几列,然后按照行去拆分
这句话是什么意思?根本弄不明白的,标题是前几列,又要按行来拆分??
实在不行,可以加q私聊

TA的精华主题

TA的得分主题

发表于 2021-2-4 08:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师,我还想请教一下,一下代码要怎么改才可支持拆分之后的文件是xls的格式?

Sub chaifen()
    Set d = CreateObject("scripting.dictionary")
    Dim rg As Range
    On Error Resume Next
    Set rg = Application.InputBox("请框选拆分依据列!只能选择单列单元格区域!", Title:="提示", Type:=8)
    If rg Is Nothing Then MsgBox "您没有选择拆分依据列": Exit Sub
    Application.ScreenUpdating = False '关闭屏幕更新
    r = rg.Column
    p = InputBox("请输入标题行数", "标题行", "1")
    If p = "" Then MsgBox "您没有输入标题行数": Exit Sub
    pp = MsgBox("拆分为工作表选【是】,拆分为工作簿选【否】", vbYesNo)
    Set sh = ThisWorkbook.ActiveSheet
    ar = sh.[a1].CurrentRegion
    For i = Val(p) + 1 To UBound(ar)
        If Trim(ar(i, r)) <> "" Then
            d(Trim(ar(i, r))) = ""
        End If
    Next i
    If pp = vbNo Then GoTo 10
    Application.DisplayAlerts = False '关闭警告信息提示
    For Each sht In Worksheets '遍历一遍工作表,如果字典中存在则删除
        If d.exists(sht.Name) Then sht.Delete
    Next sht
    Application.DisplayAlerts = True
10:
    Dim rng As Range
    For Each k In d.keys
        If pp = vbYes Then
            sh.Copy after:=Sheets(Sheets.Count)
            With Sheets(Sheets.Count)
                 For i = Val(p) + 1 To UBound(ar)
                    If Trim(.Cells(i, r)) <> k Then
                        If rng Is Nothing Then
                            Set rng = .Rows(i)
                        Else
                            Set rng = Union(rng, .Rows(i))
                        End If
                    End If
                Next i
                rng.Delete
                For Each ss In .Shapes
                    ss.Delete
                Next ss
                .Name = k
            End With
            Set rng = Nothing
        ElseIf pp = vbNo Then
            sh.Copy
            With ActiveWorkbook.Worksheets(1)
                 For i = Val(p) + 1 To UBound(ar)
                    If Trim(.Cells(i, r)) <> k Then
                        If rng Is Nothing Then
                            Set rng = .Rows(i)
                        Else
                            Set rng = Union(rng, .Rows(i))
                        End If
                    End If
                Next i
                rng.Delete
                For Each ss In .Shapes
                    ss.Delete
                Next ss
                .Name = k
            End With
            Set rng = Nothing
            ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & k
            ActiveWorkbook.Close
        End If
    Next k
     Set d = Nothing
    Application.ScreenUpdating = True '恢复屏幕更新
    MsgBox "数据拆分完成!"
End Sub

TA的精华主题

TA的得分主题

发表于 2021-2-17 13:46 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主的分享!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-17 13:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
rainniecc 发表于 2021-2-4 08:40
老师,我还想请教一下,一下代码要怎么改才可支持拆分之后的文件是xls的格式?

Sub chaifen()

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & k & ".xls", xlexcel:=8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-2-19 04:42 | 显示全部楼层
拆分为多表多薄,拆分工作薄后,如果能把标题行下面没有数据的工作表再删除了,就更完美了

TA的精华主题

TA的得分主题

发表于 2021-4-30 15:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
rainniecc 发表于 2021-2-4 08:40
老师,我还想请教一下,一下代码要怎么改才可支持拆分之后的文件是xls的格式?

Sub chaifen()

将ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & k修改为 ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & k& ".xls"

TA的精华主题

TA的得分主题

发表于 2021-5-10 08:16 | 显示全部楼层
老师,请问拆分后的表格都保存在哪里了呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 16:23 , Processed in 0.043585 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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