ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

如何将总表拆分成多个分表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-2-11 18:38 | 显示全部楼层 |阅读模式
怎么将数据源拆分成以部门为单位的多个分表

数据源.rar

8.95 KB, 下载次数: 91

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-11 18:40 | 显示全部楼层
求大神指导

TA的精华主题

TA的得分主题

发表于 2019-2-11 20:43 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-12 10:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-2-13 17:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 左面的鱼 于 2019-2-13 17:36 编辑

按列拆分是不用VBA就能实现吗?想知道。
这个问题网上搜搜就能找到代码。
下面代码就是按A列拆分,从网上找的。

  1. Sub Sepsheets()
  2. ' Sepsheets Macro
  3. ' 将工作薄的内容按A列分类从第二行开始放入不同工作薄中。
  4. Dim i As Integer
  5. Dim j As Integer
  6. ' i & j 用于行循环
  7. Dim k As Integer
  8. Dim h As Integer
  9. ' k & h用于excel表单循环
  10. Dim m As Integer
  11. 'm用于根据表头内容判断有多少列需要分页
  12. Dim n As Integer
  13. '临时变量,用于判断是否需要新建表单
  14. Dim p As String
  15. 'p 代表当前工作表单表单名
  16. Dim q As String
  17. 'q用于表示以A列中分类的内容为名建立的表单
  18. Range("a1").Select
  19. p = ActiveSheet.Name
  20. j = ActiveSheet.[a65536].End(3).Row
  21. m = Sheets(p).Cells(1, 256).End(xlToLeft).Column
  22. h = Sheets.Count
  23. n = 0
  24. For i = 2 To j
  25.     Sheets(p).Select
  26.     If Range("A" & i).Value <> "" Then
  27.    
  28.         For k = 1 To h
  29.             If Sheets(k).Name <> Range("A" & i).Value Then
  30.                 n = n + 1
  31.             End If
  32.         Next k
  33.         If n = h Then
  34.             Sheets.Add after:=Sheets(h)
  35.             h = h + 1
  36.             Sheets(h).Name = Sheets(p).Range("A" & i).Value
  37.             Sheets(p).Range("A1:" & Chr(m + 64) & "1").Copy Sheets(h).Range("a1")
  38.         End If
  39.         n = 0
  40.         q = Sheets(p).Range("A" & i).Value
  41.         Sheets(p).Range("A" & i & ":" & Chr(m + 64) & i).Copy Sheets(q).[a65536].End(3).Offset(1, 0)
  42.     End If
  43. Next i
  44. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-12-7 00:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
收藏一下

TA的精华主题

TA的得分主题

发表于 2024-5-3 16:19 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-5-3 16:38 编辑

虽然是多年前的求助帖子,但既然没有解决,那我就写一个呗。
原格式总表拆分为多表
纯练手。。。

数据源.7z

24.68 KB, 下载次数: 14

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-3 16:20 | 显示全部楼层
练手而已。。。

总表拆分为多表。
  1. Sub ykcbf2()  '//2024.5.3
  2.     Dim arr, brr, d
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Application.ScreenUpdating = False
  5.     Application.DisplayAlerts = False
  6.     Dim tm: tm = Timer
  7.     Set ws = ThisWorkbook
  8.     Set sh = ws.Sheets("数据源")
  9.     bt = 1: col = 2
  10.     For Each sht In Sheets
  11.         If sht.Name <> sh.Name Then sht.Delete
  12.     Next
  13.     arr = sh.UsedRange
  14.     For i = 3 To UBound(arr)
  15.         s = arr(i, col)
  16.         If Not d.Exists(s) Then
  17.             Set d(s) = CreateObject("scripting.dictionary")
  18.         End If
  19.         d(s)(i) = Application.Index(arr, i)
  20.     Next i
  21.     For Each k In d.keys
  22.         sh.Copy after:=Sheets(Sheets.Count)
  23.         Set sht = Sheets(Sheets.Count)
  24.         m = d(k).Count
  25.         With sht
  26.             .Name = k
  27.             .UsedRange.Offset(m + bt).Clear
  28.             .DrawingObjects.Delete
  29.             .Cells(bt + 1, 1).Resize(m, UBound(arr, 2)) = Application.Rept(d(k).Items, 1)
  30.         End With
  31.     Next k
  32.     sh.Activate
  33.     Set d = Nothing
  34.     Application.DisplayAlerts = True
  35.     Application.ScreenUpdating = True
  36.     MsgBox "共用时:" & Format(Timer - tm) & "秒!"
  37. End Sub

复制代码

评分

1

查看全部评分

头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2024-5-3 18:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-3 19:05 | 显示全部楼层
Option Explicit
Sub TEST0()
    Dim ar, br, cr, i&, j&, dic As Object, vKey, wks As Worksheet
   
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Set dic = CreateObject("Scripting.Dictionary")
   
    ar = Sheets("数据源").[A1].CurrentRegion.Value
    For i = 2 To UBound(ar)
        dic(ar(i, 2)) = dic(ar(i, 2)) & " " & i
    Next i
   
    With Workbooks.Add
        For Each vKey In dic.keys
            cr = Split(dic(vKey))
            ReDim br(1 To UBound(cr) + 1, 1 To UBound(ar, 2))
            For j = 1 To UBound(ar, 2): br(1, j) = ar(1, j): Next
            For i = 1 To UBound(cr)
                For j = 1 To UBound(ar, 2)
                    br(i + 1, j) = ar(cr(i), j)
                Next j
            Next i
            With .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
                .Name = vKey
                .[A1].Resize(UBound(br), UBound(br, 2)) = br
            End With
        Next
        For Each wks In .Worksheets
            If wks.Name Like "*Sheet*" Then wks.Delete
        Next
    End With
   
    Set dic = Nothing
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    Beep
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-8 17:14 , Processed in 0.038062 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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