合併 Excel 檔案 VBA:用 ChatGPT 複製整張工作表
合併 Excel 檔案 VBA 並不是只有一種寫法,本文以一個實際情境,示範如何透過 ChatGPT 對話,逐步釐清需求並完成程式,把「一月傳票明細.xlsx」整張工作表複製到目前的「二月傳票明細.xlsm」中。

一、合併 Excel 檔案 VBA 的兩種做法
合併 Excel 檔案 VBA 常見有兩種做法,第一種是「資料合併到同一工作表」,適合多份明細整併成一張總表,VBA 核心動作是複製資料區,再貼到最後一列,最後所有資料會集中在同一張工作表中。第二種是「工作表合併到同一活頁簿」,適合保留來源工作表原有的格式與欄位,VBA 核心動作改用 Worksheet.Copy,執行後會在目前活頁簿新增一張工作表,而不是把資料硬塞進既有表格。
本文實作的是第二種做法,目標是把「一月傳票明細.xlsx」整張工作表,複製到目前的活頁簿中,成為一張新的工作表,原本的工作表內容完全不受影響。
開始寫 VBA 之前,先分清楚是要「合併資料」還是「合併工作表」非常重要,因為兩者對應的程式邏輯完全不同,如果一開始沒有想清楚,後續和 ChatGPT 溝通需求時也容易出現落差。如果希望進一步了解從提出需求、取得程式到執行巨集的完整流程,也可以參考ChatGPT寫Excel巨集的實作方式。

二、確認目前活頁簿與傳票資料
畫面中目前開啟的是「二月傳票明細.xlsx」,工作表名稱為「傳票明細」,資料筆數已經來到 3,100 筆以上。欄位依序為傳票日期、月份、傳票編號、科目代碼、科目名稱、摘要、備註、部門代碼、部門名稱,是一份典型的會計傳票明細表。
目前活頁簿中已經有完整的二月份傳票資料,接下來贊贊小屋希望把放在同一個資料夾中的一月傳票明細,整張工作表加進這個活頁簿,方便日後查閱不同月份的資料。
這個需求和一般把資料貼到既有工作表的做法不同,因為目標並不是把一月與二月的資料混在同一張表裡,而是希望兩個月份的資料各自獨立成一張工作表,保留原本的欄位設定與格式,這也是後續向 ChatGPT 提問時,必須特別說明清楚的重點。


三、請 ChatGPT 產出第一版 VBA
贊贊小屋輸入的 Prompt 為:
「Excel想取得檔案名稱『一月傳票明細』的資料,VBA程式?」
ChatGPT 提供了初版 VBA,做法是以固定完整路徑開啟「一月傳票明細.xlsx」,使用 UsedRange.Copy 複製來源資料,再將資料貼到目前工作簿的第一張工作表,最後關閉來源檔案且不儲存變更。
這份程式雖然可以順利讀取來源檔案,但 ChatGPT 把需求理解成「複製資料區」,也就是將 UsedRange 中的儲存格內容與格式貼到既有工作表,尚未符合「複製整張工作表」的需求。工作表名稱、欄寬、頁面設定及其他工作表層級的設定,不一定能完整保留。
AI 第一次回答不完全符合需求,通常不是程式本身寫錯,而是因為需求描述得不夠明確,ChatGPT 只能依照字面上的「取得資料」去理解,這也是後續需要補充說明的原因。


四、釐清資料複製與工作表複製
ChatGPT 說明這份初版程式,會把「一月傳票明細」的內容複製到目前檔案的第一張工作表,並進一步詢問贊贊小屋,究竟是要把整份資料匯入,還是希望依照檔名自動搜尋對應的檔案。
贊贊小屋補充的 Prompt 為:
「想得和目前資料夾內的檔案,直接把工作表複製成為一個新的工作表,不是跟現在的工作表一起。」
這次補充明確加入了三個條件:第一,來源檔案位於目前資料夾,不需要寫死完整路徑;第二,要複製的是整張工作表,而不只是資料內容;第三,複製過去之後要成為一張新的工作表,不能直接貼進既有的工作表中。
「資料複製」與「工作表複製」在 VBA 中其實是兩種不同的程式邏輯,前者只處理儲存格範圍,後者則是針對整個工作表物件操作,這個觀念的釐清,正是接下來 ChatGPT 修改程式方向的關鍵。


五、用目前資料夾路徑尋找檔案
ChatGPT 接著把原本寫死的路徑,改用:
ThisWorkbook.Path & "\一月傳票明細.xlsx"
自動取得目前活頁簿所在的資料夾,同時加入檔案存在與否的檢查:
If Dir(檔案路徑) = "" Then
ThisWorkbook 代表存放這段 VBA 程式的活頁簿,本例就是「二月傳票明細.xlsm」;ThisWorkbook.Path 則取得這個活頁簿所在的資料夾。不必再手動寫死類似 C:\Users\... 這種完整路徑,只要把一月與二月的兩個 Excel 檔案放在同一個資料夾中,程式就能自動找到來源檔案。Dir 函數則用來確認檔案是否存在,避免在檔案不存在時直接開啟而造成程式錯誤。
相對於固定完整路徑,使用目前資料夾路徑的寫法更方便移動與交付檔案,即使日後把整個資料夾搬到別台電腦,也不需要重新修改程式中的路徑設定。


六、重新編輯 Prompt 說清楚需求
贊贊小屋透過 ChatGPT「編輯訊息」的功能,將原本的 Prompt 修正為:
「想得到目前資料夾內的檔案,直接把工作表複製成為一個新的工作表,不是跟現在的工作表一起。」
ChatGPT 重新確認需求,整理出四個重點:在目前活頁簿的同一個資料夾中,尋找「一月傳票明細.xlsx」;直接把來源檔案的整張工作表複製進來;複製後要成為目前活頁簿中的一張新工作表;不是貼在現有的表格之上。
「編輯訊息」的作用,是直接修正原始提問內容,讓 ChatGPT 依照更新後的需求重新產生答案,而不是在對話串中另外新增一則訊息,這樣可以讓 ChatGPT 針對最新版本的需求重新理解一次。寫 Prompt 時,比起只說「匯入資料」,更應該交代清楚來源位置、複製單位與最終想要的結果;延伸的提問思路,可以參考ChatGPT問問題技巧,有助於減少來回修改的次數。


七、看懂完整 VBA 的執行邏輯
這個版本的程式,先用 Set wb目標 = ThisWorkbook 取得目標活頁簿物件,也就是存放這段巨集的「二月傳票明細.xlsm」,再透過 wb目標.Path 取得這個活頁簿所在資料夾,接著開啟「一月傳票明細.xlsx」,並將其整張工作表複製到目前活頁簿最後一張工作表之後。複製完成後,使用:
wb來源.Close SaveChanges:=False
關閉來源檔案,確保不會儲存任何變更,最後跳出訊息方塊提示複製完成。完整程式碼如下:
Sub 匯入一月傳票明細工作表()
Dim wb來源 As Workbook
Dim wb目標 As Workbook
Dim 檔案路徑 As String
' 設定目前活頁簿
Set wb目標 = ThisWorkbook
' 取得目前活頁簿所在資料夾
檔案路徑 = wb目標.Path & "\一月傳票明細.xlsx"
' 檢查檔案是否存在
If Dir(檔案路徑) = "" Then
MsgBox "找不到檔案:" & 檔案路徑, vbExclamation
Exit Sub
End If
' 開啟來源檔案
Set wb來源 = Workbooks.Open(檔案路徑)
' 複製第一張工作表到目前活頁簿最後面
wb來源.Sheets(1).Copy After:=wb目標.Sheets(wb目標.Sheets.Count)
' 關閉來源檔案,不儲存變更
wb來源.Close SaveChanges:=False
MsgBox "已將「一月傳票明細.xlsx」的工作表複製到目前活頁簿!"
End Sub
ChatGPT 在說明中整理出三項功能:wb目標.Path 會自動取得目前檔案所在資料夾;接著開啟來源檔案並複製整張工作表;最後關閉來源檔案,不會改動到原始檔案內容。畫面最後 ChatGPT 詢問:「你要複製的是『所有工作表』還是『只要第一張工作表』呢?」,目前這份程式採用的是複製來源檔案第一張工作表的邏輯,如果來源檔案中還有其他工作表,並不會一併被複製過來。
來源檔案不儲存變更這件事相當重要,可以確保原始的一月傳票明細檔案不會被意外修改,而複製第一張工作表與複製全部工作表的差異,也會直接影響合併後活頁簿的工作表數量,使用前最好先確認來源檔案的工作表結構。


八、執行巨集並確認合併結果
執行巨集之後,目前檔案已另存為「二月傳票明細.xlsm」,原本的工作表名稱仍為「傳票明細」,並新增了一張名為「傳票明細 (2)」的工作表。新工作表中顯示的月份為 1,正是一月份的傳票資料,而原本的二月工作表內容也完整保留,沒有受到影響。
VBA 已經成功將來源檔案的整張工作表複製到目前活頁簿,由於來源與目標工作表原本同名,Excel 會自動將新工作表命名為「傳票明細 (2)」,避免名稱重複。新增的工作表保留了來源資料的欄位與內容,包括傳票日期、傳票編號、科目代碼等所有欄位都完整呈現。需要特別留意的是,巨集必須儲存在 .xlsm 格式的檔案中才能保留;若另存為一般 .xlsx,Excel 會顯示無法保留巨集的警告,確認後 VBA 程式碼將被移除。
執行完成後,除了確認工作表是否成功新增之外,也建議抽查月份、資料筆數、欄位內容是否完整,以及和來源檔案是否一致,確保整個合併過程沒有遺漏或重複的資料。


程式問題,往往先是需求問題
回顧這次與 ChatGPT 的互動,贊贊小屋發現最關鍵的轉折,其實不在程式碼本身,而在於把「合併資料」與「合併工作表」這兩個概念說清楚的那一刻。一開始的 Prompt 寫得不夠精確,ChatGPT 自然只能照字面理解成資料匯入,直到透過編輯訊息重新描述需求,程式邏輯才整個轉向 Worksheet.Copy 的做法。這個過程也提醒贊贊小屋,使用 AI 工具寫 VBA 時,與其反覆嘗試新的提問,不如善用編輯訊息功能,把同一個需求修得更精準,往往比重新開一個對話更有效率。對於經常需要處理月結傳票或多份明細表的會計工作者來說,這種把整張工作表完整複製過來的做法,能保留原始格式與欄位,也讓不同月份的資料可以分開管理又彼此對照,是相當實用的一種合併 Excel 檔案 VBA 技巧。
學會計、學Excel、學習AI工具,歡迎加入贊贊小屋社群。
Claude Code 教學:從安裝到 Excel、PPT 與網頁實戰
Claude Code 教學、ChatGPT怎麼用?、ChatGPT Excel教學、ChatGPT寫ExcelVBA、Gemini是什麼?、Notion教學、AI對會計的影響。
贊贊小屋AI課程:OpenClaw AI 代理、Codex 網站、Claude Code 實戰、ChatGPT課程、AI工具全攻略、Notion課程。
相關文章:

