- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)