按照指定条件拆分表格(高).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Sub 按照指定条件拆分表格() Dim d As Object, sht As Worksheet, arr, brr, r, kr, i, j, k, x Dim Rng As Range, Rg As Range, tRow, tCol, aCol, pd, Cll As Range Dim Mystr$ Set d = CreateObject(scripting.dictionary) set字典 Set Rg = Application.InputBox(请框选拆分依据列!只能选择单列单元格区域!, Title:=提示, Type:=8) 用户选择的拆分依据列 tCol = Rg.Column 取拆分依据列列标 tRow = Val(Application.InputBox(请输入总表标题行的行数?)) 用户设置总表的标题行数 If tRow 0 Then MsgBox 标题行数不能为负数,程序退出。: Exit Sub Set Rng = ActiveSheet.UsedRange 总表的数据区域 Set Cll = ActiveSheet.Cells 总表的单元格集 arr = Rng 数据范围装入数组arr tCol = tCol - Rng.Column + 1 计算依据列在数组中的位置 aCol = UBound(arr, 2) 数据源的列数 For i = tRow + 1 To UBound(arr) 遍历数组arr If arr(i, tCol) = Then arr(i, tCol) = 单元格空白 Mystr = arr(i, tCol) 统一转换为字符串格式 If Not d.exists(Mystr) Then d(Mystr) = i 字典中不存在关键词则将行号装入字典 Else d(Mystr) = d(Mystr) , i 如果存在则合并行号,以逗号间隔 End If Next Application.DisplayAlerts = False 关闭警告信息提示 For Each sht In ActiveWorkbook.Worksheets 遍历一遍工作表,如果字典中存在则删除 If d.exists(sht.Name) Then sht.Delete Next Application.DisplayAlerts = True 恢复警告信息 kr = d.keys 字典的key集 Application.ScreenUpdating = False 关闭屏幕刷新 For i = 0 To UBound(kr) 遍历字典key值 If kr(i) Then 如果key不为空 r = Split(d(kr(i)), ,) 取出item里储存的行号 ReDim brr(1 To UBound(r) + 1, 1 To aCol) 声明放置结果的数组brr k = 0 For x = 0 To UBound(r) k = k + 1 累加记录行数 For j = 1 To aCol 读取遍历列 brr(k, j) = arr(r(x), j) Next Next With Worksheets.Add(, Sheets(Sheets.Count)) 新建一个工作表,位置在所有已存在sheet的后面 .Name = kr(i) 表格命名 .[a1].Resize(UBound(arr), aCol).NumberFormat = @ 设置文本格式 If tRow 0 Then .[a1].Resize(tRow, aCol) = arr 放标题行 .[a1].Offset(tRow, 0).Resize(k, aCol) = brr 放置数据区域 Cll.Copy 复制粘贴总表

文档评论(0)

_______ + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档