如何用 VBA 自动合并多个 Excel 文件

2022-01-07 数码科技
如何用 VBA 自动合并多个 Excel 文件

在日常工作中,我们常常需要将来自不同部门或项目的多个 Excel 工作簿数据汇总到一起。手动操作不仅繁琐,还容易出错。幸运的是,Excel 自带的 VBA 功能可以帮助我们自动化这个过程。本文将介绍一个基础的 VBA 宏,它能自动读取指定文件夹中的所有工作簿,并将数据合并到一个总表中。

准备工作:整理你的文件

在编写代码之前,需要先做好文件整理。我的理解是,这就像准备一个“原料库”,让程序能有序地取用。

  1. 准备一个“容器”:你需要一个单独的 Excel 工作簿,用来存放 VBA 代码和最终的合并结果。这个文件需要保存为“启用宏的工作簿”(.xlsm 格式)。
  2. 建立专用文件夹:将所有需要合并的源数据工作簿,统一放到一个新建的文件夹里,例如命名为“Consolidation”。这样,宏运行时就知道该去哪里找文件了。

VBA 宏的核心代码

准备工作完成后,就可以在 Excel 中按下 Alt + F11 打开 VBA 编辑器,插入一个新的模块,并将以下代码粘贴进去。

vba Sub openfiles() Dim MyFolder As String, MyFile As String, wbmain As Workbook, lastrow As Long With Application .DisplayAlerts = False .ScreenUpdating = False End With MyFolder = InputBox("Enter path of the Consolidation folder") & "\" MyFile = Dir(MyFolder) Do While Len(MyFile) > 0 Windows("Consolidation").Activate Range("a1048576").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select Workbooks.Open Filename:=MyFolder & MyFile Windows(MyFile).Activate Dim ws As Worksheet For Each ws In Sheets ws.Activate ws.AutoFilterMode = False If Cells(2, 1) = "" Then GoTo 1 GoTo 10 1: Next 10: Range("a2:az20000").Copy Windows("Consolidation").Activate ActiveSheet.Paste Windows(MyFile).Activate ActiveWorkbook.Close MyFile = Dir() Loop With Application .DisplayAlerts = True .ScreenUpdating = True End With End Sub

代码是如何工作的?

这段代码的逻辑并不复杂,它像一个有条不紊的助手,按步骤完成任务。

  • 初始化与提速:代码开头定义了一些变量,并关闭了屏幕更新和警告提示,这能显著提升宏的运行速度。
  • 定位与循环:它会弹窗让你输入“Consolidation”文件夹的路径,然后开始循环处理该文件夹内的每一个 Excel 文件。
  • 复制与粘贴:对于每个打开的文件,宏会遍历其中的每一个工作表,清除可能存在的筛选器,然后复制从 A2 到 AZ20000 区域的数据(假设这是你的数据范围)。接着,它会在名为“Consolidation”的总工作簿中找到最后一行,并将数据粘贴到下方。
  • 循环与收尾:处理完一个文件后,将其关闭,然后自动打开下一个文件,重复上述步骤,直到所有文件都处理完毕。最后,恢复屏幕更新和警告提示。

根据你的需求进行定制

这个基础宏可以根据你的具体情况进行调整,使其更贴合你的工作流程。

  • 固定文件夹路径:如果你不想每次运行都手动输入路径,可以将 MyFolder = InputBox(...) 这行代码,直接替换为 MyFolder = “C:\你的文件夹路径” & “\”
  • 调整数据范围:代码中 Range(“a2:az20000”) 定义了要复制的区域。如果你的数据列数不同(比如只到 M 列),可以将其中的 “AZ” 改为你需要的最后一列字母。
  • 重要前提:这个宏最适合合并结构格式完全相同的工作簿。