在多檔案資料整合的情境中,將多個 Excel 檔案的內容集中複製到主工作簿是一項常見需求。透過 VBA,我們可以建立一個「一鍵複製」功能,自動開啟指定資料夾內的 Excel 檔案,並將其中的資料複製到主工作簿的指定工作表中,實現快速彙整。
功能概述
這段 VBA 程式碼可實現以下功能:
- 使用者選擇資料夾後,自動開啟其中所有 Excel 檔案
- 複製每個檔案中指定工作表的資料(不含標題列)
- 將資料依序貼到主工作簿的彙整工作表中
- 自動避開重複貼上與空白列
VBA 程式碼範例
Sub CopyDataToMasterWorkbook()
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) ' 假設來源資料在第一張工作表
' 複製來源資料(從第 2 列開始,跳過標題)
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 檔案的資料複製到目前工作簿的第一張工作表中。以下是逐段說明:首先,我們使用 FileDialog 讓使用者選擇資料來源資料夾,並儲存路徑至 FolderPath。
接著設定 TargetWS 為主工作簿的第一張工作表,並使用 LastRow 找出目前資料的最後一列位置,作為貼上起點。
進入 Do While 迴圈後:
- 使用
Dir函數取得資料夾內的 Excel 檔案名稱。 - 開啟每個檔案,並指定要複製的工作表(預設為第一張)。
- 使用
End(xlUp)找出來源資料的最後一列。 - 從第 2 列開始複製資料(跳過標題列),並貼到主工作表的下一個空白列。
- 關閉來源檔案,繼續處理下一個檔案。
最後使用 MsgBox 顯示複製完成的提示訊息。
操作步驟與使用方式
- 將程式碼貼入 Excel 的模組中(例如 Module1)
- 確保主工作簿已開啟並切換至彙整工作表
- 執行
CopyDataToMasterWorkbook程式 - 選擇資料來源資料夾,程式將自動複製所有資料到主工作簿
應用場景與延伸建議
- 每月報表集中彙整
- 多人填寫表單資料集中處理
- 教學作業或問卷結果整合
延伸功能建議:
- 加入來源檔案名稱記錄(新增一欄記錄檔名)
- 支援多張工作表或指定工作表名稱
- 加入資料格式驗證與錯誤處理
- 自動儲存主工作簿或匯出 PDF
常見問題 FAQ
Q1:是否可以複製特定工作表?
可以將 SourceWB.Sheets(1) 改為 SourceWB.Sheets("資料") 指定名稱。
Q2:是否可以複製多張工作表?
可以加入 For Each ws In SourceWB.Worksheets 迴圈,逐張處理。
Q3:是否可以記錄來源檔案名稱?
可以在貼上資料時於空白欄新增 FileName,方便追蹤資料來源。
結語與延伸閱讀
這段 VBA 程式碼提供了高效率的「一鍵複製資料到主工作簿」功能,適合用於報表整合、資料彙整與教學應用。後續你可以加入來源標記、格式驗證與自動儲存模組,打造完整的資料集中工具。
下一篇將介紹如何「一鍵建立目錄與超連結」,敬請期待【VBA 自動化教學】第 8 篇!!













