在日常報表處理或資料彙整工作中,經常需要將多個 Excel 檔案的內容合併到一個主工作簿中。若手動複製貼上,不僅耗時,也容易出錯。透過 VBA,我們可以建立一個「一鍵合併」功能,自動開啟資料夾內所有 Excel 檔案,並將指定工作表的資料整合到主檔案中。
功能概述
這段 VBA 程式碼可實現以下功能:
- 使用者選擇資料夾後,自動開啟其中所有 Excel 檔案
- 將每個檔案中指定工作表的資料複製到主工作簿的同一工作表中
- 自動依序貼上,避免覆蓋原有資料
- 顯示提示訊息,確認合併完成
VBA 程式碼範例
Sub MergeExcelFiles()
Dim FolderPath As String
Dim FileName As String
Dim SourceWB As Workbook
Dim SourceWS As Worksheet
Dim TargetWS As Worksheet
Dim LastRow As Long
' 選擇資料夾
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "選擇要合併的資料夾"
.AllowMultiSelect = False
If .Show <> -1 Then Exit Sub
FolderPath = .SelectedItems(1) & "\"
End With
' 設定目標工作表(本工作簿的第一張工作表)
Set TargetWS = ThisWorkbook.Sheets(1)
LastRow = TargetWS.Cells(TargetWS.Rows.Count, 1).End(xlUp).Row + 1
' 開始讀取資料夾內的 Excel 檔案
FileName = Dir(FolderPath & "*.xls*")
Do While FileName <> ""
Set SourceWB = Workbooks.Open(FolderPath & FileName)
Set SourceWS = SourceWB.Sheets(1) ' 假設要合併的是每個檔案的第一張工作表
' 複製來源工作表的資料(不含標題列)
With SourceWS
Dim SourceLastRow As Long
SourceLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
If SourceLastRow > 1 Then
.Range("A2:A" & SourceLastRow).EntireRow.Copy
TargetWS.Cells(LastRow, 1).PasteSpecial xlPasteValues
LastRow = TargetWS.Cells(TargetWS.Rows.Count, 1).End(xlUp).Row + 1
End If
End With
SourceWB.Close False
FileName = Dir
Loop
Application.CutCopyMode = False
MsgBox "所有資料已成功合併", vbInformation
End Sub
程式碼詳細解說(初學者導向)
這段程式碼的目的是將多個 Excel 檔案的資料合併到目前工作簿的第一張工作表中。以下是逐段說明:首先,我們宣告了幾個變數:
FolderPath
儲存使用者選擇的資料夾路徑。FileName
儲存目前正在處理的檔案名稱。SourceWB
是來源工作簿(被開啟的檔案)。SourceWS
是來源工作表(預設為第一張)。TargetWS
是目標工作表(本工作簿的第一張工作表)。LastRow
是目標工作表中目前最後一列的位置,用來決定貼上資料的位置。
接著,我們使用 FileDialog
讓使用者選擇資料夾,並將路徑存入 FolderPath
。
然後設定 TargetWS
為目前工作簿的第一張工作表,並計算目前資料的最後一列位置。
進入 Do While
迴圈後:
- 使用
Dir
函數取得資料夾內的 Excel 檔案名稱。 - 開啟每個檔案,並指定要合併的工作表(這裡預設為第一張)。
- 使用
.Cells(.Rows.Count, 1).End(xlUp).Row
找出來源工作表的最後一列。 - 從第 2 列開始複製資料(跳過標題列),並貼到目標工作表的下一個空白列。
- 關閉來源檔案,繼續處理下一個檔案。
最後,顯示提示訊息,告知使用者合併完成。
操作步驟與使用方式
- 將程式碼貼入 Excel 的模組中(例如 Module1)
- 執行
MergeExcelFiles
程式 - 選擇要合併的資料夾
- 等待程式自動開啟並合併所有檔案資料
應用場景與延伸建議
- 每月報表彙整(如業務、財務、庫存)
- 教學範例資料整合
- 多人填寫的 Excel 表單集中處理
延伸功能建議:
- 加入標題列自動判斷與比對
- 支援多工作表或指定工作表名稱
- 自動記錄來源檔案名稱(可新增一欄記錄)
- 加入錯誤處理與進度提示
常見問題 FAQ
Q1:是否可以合併多張工作表? 目前程式碼只處理每個檔案的第一張工作表,若需合併多張,可加入迴圈處理 Worksheets
集合。
Q2:如何避免重複貼上標題列? 程式碼已設定從第 2 列開始複製,跳過標題列。若來源格式不一致,建議加入標題比對邏輯。
Q3:是否可以合併 .csv
或其他格式? 此程式碼僅處理 Excel 格式(.xls
、.xlsx
、.xlsm
),若需處理 .csv
,需改用 OpenText
方法。
結語與延伸閱讀
這段 VBA 程式碼提供了高效率的「一鍵合併 Excel 資料」功能,適合用於報表整合、資料彙整與教學應用。後續你可以進一步加入格式比對、資料驗證或自動分類模組,打造更完整的 Excel 自動化工具。
下一篇將介紹如何「一鍵匯出 Excel 工作表為 PDF」,敬請期待【VBA 自動化教學】第 3 篇。