分享

VBA代码实例---一个工作表拆分为N个工作表

 hdzgx 2019-11-26

这是一个常用而且经典的例子:根据内容,把一个工作表中的内容,拆分到N个工作表中,并根据内容命名新建的工作表。

¤主要知识点¤

1、影响代码执行闪屏以及提示框的处理:

  1. Application.ScreenUpdating = False
  2. Application.DisplayAlerts = False
  3. Application.DisplayAlerts = True
  4. Application.ScreenUpdating = True

2、工作表的新建,命名,删除操作;

3、单元格区域的内容复制方式;

4、IF分支语句和For循环语句的使用;

 ¤实例¤

新建工作表,把员工信息复制到对应的以部门命名的工作表中。


¤实现代码¤ 

  1. Option Explicit
  2. Sub 拆分工作表()
  3. Application.DisplayAlerts = False '不显示错误提示框
  4. Application.ScreenUpdating = False '不闪屏
  5. Dim i As Integer '辅助工作表变量
  6. Dim sh As Worksheet
  7. '删除多余的工作表
  8. If Sheets.Count > 1 Then
  9. For i = Worksheets.Count To 2 Step -1
  10. Worksheets(i).Delete
  11. Next i
  12. End If
  13. '对信息表中数据按照部门排序,之后按照部门拆分进新的工作表
  14. Dim irow As Integer '定义一共需要处理的行号
  15. Dim istart As Integer '定位起始行数变量
  16. irow = Range("A" & Rows.Count).End(xlUp).Row '计算一共需要处理的行号
  17. If irow > 2 Then
  18. Range("a3:H" & irow).Sort Range("f2"), xlAscending '对信息区域进行排序,不能含标题
  19. istart = 3
  20. For i = 3 To irow
  21. With Worksheets("员工信息表") '指定活动工作表
  22. If .Range("f" & i).Value <> .Range("f" & i + 1).Value Then '判断是否为同一部门
  23. Worksheets.Add after:=Worksheets(Sheets.Count) '新建工作表
  24. Set sh = Worksheets(Worksheets.Count) '指定工作表给变量
  25. sh.Name = .Range("f" & i).Value '以部门命名工作表
  26. .Range("a1:h2").Copy sh.Range("a1:h2") '复制标题到新建工作表中
  27. .Range("a" & istart & ":h" & i).Copy sh.Range("a3") '复制内容到工作表中
  28. sh.Columns.AutoFit '设置自动列宽
  29. istart = i + 1
  30. End If
  31. End With
  32. Next i
  33. End If
  34. Worksheets("员工信息表").Select '回到第一个工作表
  35. Application.ScreenUpdating = True '恢复闪屏默认设置
  36. Application.DisplayAlerts = True '恢复提示框默认设置
  37. End Sub

  1. Option Explicit
  2. Sub 拆分工作表2()
  3. Application.ScreenUpdating = False
  4. Application.DisplayAlerts = False
  5. Dim i As Integer
  6. If Worksheets.Count > 1 Then
  7. For i = Worksheets.Count To 2 Step -1
  8. Worksheets(i).Delete
  9. Next i
  10. End If
  11. Dim irow As Integer
  12. Dim k As Integer
  13. Dim sDep As String
  14. Dim sh As Worksheet
  15. irow = Range("A" & Rows.Count).End(xlUp).Row
  16. For i = 3 To irow
  17. sDep = Worksheets(1).Range("F" & i).Value
  18. On Error Resume Next '遇到错误继续,这里错误主要是未定义的工作表
  19. Set sh = Worksheets(sDep) '这一行如果遇到工作表不存在,就会报错,返回值为err.number <> 0
  20. If Err.Number <> 0 Then '工作表不存在,那么新建工作表,并把标题复制到新建的工作表
  21. Set sh = Worksheets.Add(, Worksheets(1))
  22. sh.Name = sDep
  23. Worksheets(1).Range("A1:h2").Copy sh.Range("A1")
  24. End If
  25. k = sh.Range("A1").CurrentRegion.Rows.Count + 1 '依次复制内容到工作表的行号
  26. 'sh.Range("A" & k).Resize(1, 7).Value = Worksheets(1).Range("A" & i).Resize(1, 7).Value '赋值方法
  27. Worksheets(1).Range("A" & i & ":h" & i).Copy sh.Range("A" & k) '复制方法
  28. sh.Columns.AutoFit '列宽自动调整
  29. Next i
  30. Application.DisplayAlerts = True
  31. Application.ScreenUpdating = True
  32. End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多