分享

VBA -- 实现按指定条件拆分工作表的功能

 hdzgx 2019-11-19

大数据背景下,数据变成了巨大的财富。各种数据库如关系型数据库SQL/Oracle和非关系型数据库MangoDB/Redis等的演化和应用更加丰富;同时数据分析从数据采集、数据预处理到数据集成、数据挖掘的需求也更大。从数据采集到数据挖掘,最终服务企业运营,是一条完整和严谨的数据分析流程。在完成高大上的数据挖掘之前,数据采集、预处理到数据集成是不容忽视的基础工作,也是十分繁琐和费时的过程。

现在,许多企业中有大批工作人员工作内容与数据分析的前三个工作流程密切相关,常用软件是Microsoft Excel。日常摆脱不了“表”的纠缠而加班,可能是许多上班族同仁的痛点吧。

个人因兴趣而开此公众号,借此发一些数据分析理论基础/软件操作/编程等的方法或心得,希望能对人对已有所帮助。作为引子,先发一篇VBA按条件拆分工作表的方法,希望有所帮助。

作为例子,创建一个名为“ALL”的工作表,存放了13位不同年龄、不同部门的员工名单。字段包括员工号/姓名/部门和年龄。


现要求按照部门,将十三位员工拆分至所属部门的工作表中。实现功能的VBA代码如下:

(1)新建以部门名称命名的工作表,代码如下:

  1. Sub SplitByDept()
  2. '定义k,b为整数
  3. Dim k%,b%
  4. Sheets(1).Activate
  5. '停止页面刷新,减少内存占用
  6. Application.ScreenUpdating = False
  7. '在列表最后一列后取全部部门名称(工具列)
  8. Range("E2:E14").Value = Range("C2:C14").Value
  9. '工具列去除重复项
  10. Range("E2:E14").RemoveDuplicates 1
  11. '根据部门数量,新建工作表并以部门名称命名
  12. For k = 2 To 6
  13. a = Sheets(1).Range("E" & k).Value
  14. b = Sheets.Count
  15. Sheets.Add after:=Sheets(b)
  16. Sheets(b+1).Name = a
  17. '将ALL工作表表头取至新工作表
  18. Sheets(b+1).Range("A1:D1").Value = _
  19. Range("A1:D1").Value
  20. Next
  21. '清除工具列数据
  22. Range("E2:E14").ClearContents
  23. Application.ScreenUpdating = True
  24. End Sub


(2)将员工分配至所属部门工作表,代码如下:

  1. Sub MoveEmployeesToDept()
  2. Application.ScreenUpdating = False
  3. '全部员工信息写入数组
  4. arr = Range("A2:D14").Value
  5. '获取数组最大索引
  6. a = UBound(arr)
  7. '循环检查员工部门与工具列部门信息
  8. For i = 1 To a
  9. For j = 2 To 6
  10. If arr(i, 3) = Range("E" & j) Then
  11. With Sheets(j)
  12. x = .Range("A10").End(xlUp).Row
  13. '部门信息一致的写入对应工作表
  14. For k = 1 To 4
  15. .Cells(x + 1, k) = arr(i, k)
  16. Next
  17. End With
  18. End If
  19. Next
  20. Next
  21. '清除工具列数据
  22. Range("E2:E14").ClearContents
  23. Application.ScreenUpdating = True
  24. Erase arr
  25. Thisworkbook.Save
  26. End Sub

以上两部门代码实现了将员工总表按照所属部门进行拆分的功能。实现结果如下图:


本文介绍了通过VBA拆分工作表的方法,也抛出了个人公众号的“VBA引子”。VBA语言比较简单易懂,而且对实际工作有很大的帮助,后期文章将根据情况介绍VBA基础及其他高阶的应用。另外下一个“引子”打算抛出python爬虫,后期也将继续更新python基础、python各种库的调用,以及tableau画图软件的应用等。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多