我开始使用Excel时,也无法做到可以在工作中熟练使用,直到我学习了Excel VBA,打开了我Excel自动化办公的大门,VBA可以编写宏和自定义函数,实现更复杂的数据处理和自动化任务,在自动化处理数据或开发自定义功能时有很大作用。
比如,下面的数据处理办公场景,在Excel处理多个表数据时,合并数据是一项繁琐的任务,尤其是当你需要手动复制粘贴时。这种工作不仅耗时,还容易出错。但是,借助 Excel VBA 的强大功能,可以编写一个脚本,批量自动合并Excel数据。
接下来,在本节中,我将详细介绍如何编写这样的 VBA 脚本,通过学习该案例,你将掌握如何在多表之间自动合并数据,并通过一些关键的 VBA 语法和逻辑,使你的 Excel 工作更高效、更智能。
数据演示如下为一张销售订单数据Excel工作簿,内含"1日","2日","3日"共三个sheet表,现在需要将这三个sheet表合并为一个sheet表,并且,当有新增加的sheet表时,也可以继续合并,常规做法是一个一个sheet表复制、粘贴,倘若有上百个这样的sheet表,处理效率就很慢。
VBA准备工作接下来,我将使用Excel VBA编写代码进行批量合并,要使用Excel VBA功能,需要在自定义功能区中勾选"开发工具"选项,默认在主页不显示"开发工具"选项,需要手动勾选。首先在Excel工作簿中点击“文件”选项。
然后在对应的菜单下点击“选项”按钮。
打开Excel选项,点击“自定义功能区”,然后勾选“开发工具”,点击“确定”按钮。
在主页功能区即可看到已经加载出“开发工具”选项。
编写VBA在 Excel 中点击 "开发工具" 选项卡,点击 "Visual Basic" 按钮,打开 VBA 编辑器,VBA代码都是写在VBA 编辑器运行。
如下即为VBA 编辑器的操作界面。
在 VBA 编辑器窗口中,右键 "VBAProject(销售订单数据.xlsx)" ,依次点击 "插入" -> "模块",在插入的模块中编写 VBA 代码。
如下为编写的VBA代码,代码相对比较长,有一定的学习门槛和难度,如果看不明白的话,可以直接复制粘贴使用。
Sub 合并数据到新表() Dim ws As Worksheet Dim targetSheet As Worksheet Dim lastRow As Long Dim nextRow As Long Dim i As Integer ' 删除之前合并的数据表(如果存在) On Error Resume Next Application.DisplayAlerts = False Set targetSheet = ThisWorkbook.Sheets("合并结果") If Not targetSheet Is Nothing Then targetSheet.Delete End If Application.DisplayAlerts = True On Error GoTo 0 ' 新建一个Sheet用于存储合并后的数据 Set targetSheet = ThisWorkbook.Sheets.Add targetSheet.Name = "合并结果" ' 假设第一张表有表头,复制表头到目标Sheet For Each ws In ThisWorkbook.Sheets If ws.Name <> targetSheet.Name Then ws.Rows(1).Copy Destination:=targetSheet.Rows(1) Exit For End If Next ws ' 遍历所有工作表并合并数据 nextRow = 2 ' 设置从第2行开始合并数据(因为第1行为表头) For Each ws In ThisWorkbook.Sheets If ws.Name <> targetSheet.Name Then lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ws.Range("A2:A" & lastRow).EntireRow.Copy Destination:=targetSheet.Cells(nextRow, 1) nextRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row + 1 End If Next ws MsgBox "数据合并完成!", vbInformationEnd SubVBA运行将VBA代码复制粘贴到到 VBA 编辑器中,点击 "运行" 按钮,或按下 F5 键运行该脚本。
返回 Excel 工作簿,由结果可以看到,所有的 sheet 表数据均合并至新的 "合并结果" 表中。
为了方便有新增的sheet表进行数据合并,可以添加一个表单控件,点击"开发工具",插入一个表单控件。
点击宏名称用于指定宏,然后点击确定按钮。
如下是设置后的表单控件,只要点击表单控件"开始合并",即可一键进行数据合并。
保存VBA为了将编写的VBA可以永久保存,可以将工作簿保存为 *.xlsm 格式,点击"文件"选项,在保存类型中选择"Excel启用宏的工作簿",即可保存宏。
如果有新增的sheet表,比如这里新增"4日","5日"两个sheet表,仅需点击表单控件"开始合并",即可一键合并。
如下红色标记的地方,即为新增的sheet表批量合并后的结果。
以上,我们见识到了 VBA 在处理多表数据合并中的强大能力。无论是对于需要频繁处理数据报表的日常工作,还是面对复杂的数据管理任务,这段代码都可以为你提供极大的便利。
希望通过本节的学习,让你对VBA的应用有更深入的理解,学习和熟练掌握Excel需要时间和实践,通过持续学习和练习,可以不断提升自己的Excel技能,从而在工作中发挥更大的作用。