2025年4月16日 星期三

【Excel VBA 教學】告別手動複製貼上!用 Excel VBA 實現 Excel 合併列印,自動產生大量客製化報表

你是不是也常常遇到需要根據一份 Excel 名單(像是學生名單、客戶清單),為每個人產生一份獨立的、帶有特定格式的 Excel 報表(例如成績單、通知單、對帳單)?

一般我們想到的「合併列印」,大多是利用 Word 文件當範本,搭配 Excel 的資料來源檔,最後輸出的可能是 Word 檔或 PDF 檔。但如果我就是想要直接產生很多份獨立的 Excel 檔案呢?這時候,單純用 Excel 內建的功能好像就沒辦法直接做到了。

每次都要手動複製、貼上、另存新檔嗎?那也太沒效率了!

為了解決這個許多人(尤其是老師或行政人員)可能遇到的困擾,這次要跟大家分享一個我自己編寫的 Excel VBA 小工具,讓你輕鬆實現「Excel 對 Excel」的合併列印功能!

為什麼需要 VBA?傳統方法的限制

傳統的 Word 合併列印雖然方便,但它的主要輸出目標是「文件」,而非 Excel 格式的檔案。當我們需要:

  1. 保留 Excel 的公式或格式設定:希望產生的檔案仍然是 Excel 檔,方便後續計算或編輯。

  2. 資料來源與範本都是 Excel:操作流程都在 Excel 環境內完成。

這時候,就需要借助 Excel VBA (Visual Basic for Applications) 的強大擴充能力了。VBA 可以讓我們編寫程式碼,自動化操作 Excel 的各種功能,當然也包含讀取資料、填入範本、並另存新檔。

工具下載與準備

為了方便大家直接使用,我將 VBA 程式碼包裝在一個 Excel 檔案中,你只需要下載以下兩個檔案,並將它們放在同一個資料夾底下即可:

  1. 主程式檔 (含 VBA 腳本與範本): FillFile.xls

  2. 範例資料來源檔: score.xls

重要提醒: 主程式檔 FillFile.xls 因為包含 VBA 巨集,開啟時 Excel 可能會顯示安全性警告,請務必點選 「啟用內容」 或 「啟用巨集」,程式才能正常運作。

操作步驟詳解 (以影片範例為例)

準備好檔案後,跟著以下步驟操作:

  1. 開啟資料來源檔 (

    • 先打開 score.xls 瞭解一下內容。你會看到主要的成績資料分布在一個工作表 (例如 "明細"),另外還有一個 「個人用表」 工作表。

    • 這個「個人用表」很重要,裡面 A 欄存放的是我們要逐一處理的識別碼 (影片中是學號)。程式會根據這個清單來決定要產生哪些人的檔案。

  2. 複製識別碼清單

    • 切換到 score.xls 的「個人用表」工作表,將 A 欄所有需要處理的學號 (或其他識別碼) 複製起來。

  3. 開啟主程式檔 (

    • 關閉 score.xls

    • 開啟 FillFile.xls,記得啟用巨集

  4. 貼上識別碼

    • 切換到 FillFile.xls 的 「合併欄位」 工作表。

    • 將剛剛複製的學號清單,貼到 D 欄 (欄位名稱為 "檔名/識別碼")。程式會根據這裡的清單來產生檔案,並可能將這些識別碼作為檔名的一部分。

  5. (可選) 檢查設定

    • 切換到 FillFile.xls 的 「設定」 工作表。

    • 這裡可以設定一些參數,例如:

      • 合併的檔案名稱 (預設 score.xls)

      • 來源工作表名稱 (存放詳細資料的工作表)

      • 合併的存檔位置 (預設與主程式同目錄)

      • 是否要產生流水號檔名...等。

    • 你可以根據你的實際檔名和需求進行調整。

  6. 執行合併

    • 確認資料來源檔 (score.xls已經關閉。 (這是必要的步驟,避免檔案被鎖定)

    • 在「設定」工作表,找到並點擊 「合併Excel檔案」 按鈕。

  7. 等待完成與檢查結果

    • 程式會開始執行,根據「合併欄位」的清單,逐一讀取 score.xls 的資料,填入 FillFile.xls 的範本格式中,然後另存成新的 Excel 檔案。

    • 完成後通常會跳出提示訊息。

    • 回到你存放檔案的資料夾,你會看到產生了多個新的 Excel 檔案 (例如 score_1.xlsscore_2.xlsscore_3.xls ...)。

    • 隨意打開幾個檢查看看,確認裡面的內容是否正確對應到該學號的資料。

重點提醒 & 應用場景

  • 檔案路徑:請確保主程式檔和資料來源檔放在同一個資料夾。

  • 關閉來源檔:執行合併前,務必關閉資料來源檔 (score.xls)。

  • 啟用巨集:開啟主程式檔 (FillFile.xls) 時要啟用巨集。

  • 自訂範本:你可以自由修改 FillFile.xls 的格式、欄位、甚至加入公式,讓它符合你的報表需求。合併時,程式會將這個修改後的格式作為範本。

  • 識別碼欄位:資料來源檔 (score.xls) 中必須有一個清晰的欄位包含識別碼 (如學號、員工編號、客戶代碼),且「個人用表」裡也要有對應的清單。

這個工具特別適合用在需要大量產生格式相似、但內容依對象而異的 Excel 檔案,例如:

  • 學校:產生每位學生的個人成績單、在學證明。

  • 公司:產生每位員工的薪資條 (需注意資訊安全)、客戶對帳單、產品報價單。

  • 行政:發送個人化的活動通知單、會議邀請。

結語

透過 Excel VBA,我們可以突破 Excel 原本功能的限制,實現更自動化、更有效率的工作流程。希望這次分享的 Excel 對 Excel 合併列印工具,能夠幫助你解決工作或學習上的難題,省下大量重複操作的時間!

如果你有任何問題或建議,都歡迎留言交流!



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

Excel 小技巧:讓空白儲存格不顯示 0!

今天來分享一個 Excel 的小技巧,讓你輕鬆解決一個常見的問題:如何讓 Excel 工作表中空白的儲存格不顯示惱人的「0」? 問題描述 有網友提問,在 Excel 中使用等號 (=) 連結另一個儲存格的值時,若被連結的儲存格為空白,預設會顯示為「0」。這在某些情況下會造成混淆,...