excel VBA之拆分工作簿.docxVIP

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

分两步进行拆分,先根据指定列拆分成不同的工作表,再把工作表转成独立的工作簿。注意拆分时,将身份证转成文本格式。 1.根据指定列拆分成不同的工作表(标题行默认为1,根据N列拆分) Sub拆分() 逐行复制,速度偏慢,通用性好 Dim SplitCol As String, ColNum As Integer, HeadRows As Byte, arr, lastrow, i, ShtIndex, only As New Collection SplitCol = N 指定拆分条件所在列。可以根据实际情况修改列标 HeadRows = 1 指定标题行数,该区域不参与拆分 If HeadRows = ActiveSheet.UsedRange.Rows.Count Then Exit Sub 如果指定的标题行大于已用区域行数则退出程序 ColNum = Cells(1, SplitCol).Column 将列标转换成数字 lastrow = ActiveSheet.UsedRange.Rows.Count 获取当前表已用区域的行数 arr = Range(Cells(HeadRows + 1, SplitCol), Cells(lastrow, SplitCol)).Value 将拆分列的数据赋与变量arr On Error Resume Next For i = 1 To lastrow - HeadRows 遍历arr所有数据 提取其中的不重复值 If Len(arr(i, 1)) 0 Then only.Add CStr(arr(i, 1)), CStr(arr(i, 1)) Next i ShtIndex = ActiveSheet.Index 获取当前表位置 On Error Resume Next For i = 1 To only.Count Debug.Print Sheets(only(i)).Name 获取与only对象中每个元素同名的工作表名(用意为判断是否存在该工作表) If err = 0 Then MsgBox 当前工作簿已存在与待拆分项目同名的工作表“ only(i) ”,暂无法拆分, 64, 友情提示: Exit Sub err.Clear Next i Application.ScreenUpdating = False 关闭屏幕更新,加快执行速度 Application.Calculation = xlCalculationManual 调为手动计算,加快执行速度 For i = 1 To only.Count 创建工作表,表的数量与表名由only对象中不重复值而定 Sheets.Add After:=Sheets(Sheets.Count) 创建 Sheets(Sheets.Count).Name = only(i) 命名 Sheets(ShtIndex).Rows(1: HeadRows).Copy Sheets(Sheets.Count).Cells(1, 1) 复制标题 Next i Sheets(ShtIndex).Select 返回被拆分的工作表 For i = HeadRows + 1 To lastrow 逐行复制数据 If Len(Cells(i, SplitCol)) 0 Then 排除空值 With Sheets(Cells(i, SplitCol).Text).UsedRange.Rows(Sheets(Cells(i, SplitCol).Text).UsedRange.Rows.Count + 1) Rows(i).Copy .Cells(1) 第一次复制,复制所有数据,仅取其格式 .Cells = Rows(i : i).Value 第二次复制,仅复制数值 End With End If Next i Application.ScreenUpdating = True 恢复屏幕更新 Application.Calculation = xlCalculationAutomatic 恢复自动计算 MsgBox 拆分完毕!, 64, 友情提示 End Sub 2.转成独立的工作簿 Sub 工作簿拆分() On Error Resume Next Dim Pathstr As String, i As Long, ActiveWB As String With

文档评论(0)

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

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

1亿VIP精品文档

相关文档