ChatGPT Excel VBA 教學:自動匯入銀行對帳單,保留期初餘額累積交易

ChatGPT Excel VBA 可以協助設計銀行對帳單的匯入程式,並讓日報表保留期初餘額、接續累積交易。贊贊小屋在 ChatGPT 免費版網頁附件額度用完後,改從 Excel 增益集繼續操作,這篇依實測整理做法,以及物件變數、FileDialog 與重複匯入的重點。

ChatGPT 協助設計 Excel VBA,把銀行對帳單匯入日報表並保留期初餘額的主視覺

一、ChatGPT 免費版額度不足,改用 Excel 增益集

贊贊小屋原本用 ChatGPT 免費帳號設計銀行對帳單的 VBA 程式,想在網頁版繼續上傳 Excel 附件時,畫面下方出現「你目前已用完附件額度。升級方案以取得更多,或於明天的 下午1:08 後再試。」左下角的帳號標示為「免費版」,提示下方還有一顆「升級至 Plus」按鈕。網頁版這條路暫時走不下去,贊贊小屋改從 Excel 裡的 ChatGPT for Excel 增益集操作。同一個免費帳號在增益集裡不必再上傳附件,也不用逐一說明工作表名稱與欄位,ChatGPT 就能讀到目前活頁簿的狀態,工作因此可以繼續進行。

ChatGPT 網頁版和 Excel 增益集雖然都是 OpenAI 的產品,操作介面不同,工作流程也跟著不同。網頁版通常要把檔案當成附件上傳,或用文字描述工作表,ChatGPT 才知道資料長什麼樣子;增益集則把聊天窗格放進 Excel,以目前開啟的活頁簿作為工作環境。這次實測是在網頁版附件額度用完時,改用增益集仍然完成了工作,不過這是贊贊小屋這個免費帳號的經驗,不代表所有免費帳號都會得到相同結果。比起立刻升級付費,先看看有沒有更適合當下工作的操作介面,也是值得考慮的做法。

ChatGPT 網頁版顯示附件額度已用完的提示畫面 網頁版額度用完後改用 Excel 增益集的流程示意圖

二、保留期初餘額,設計可以累積的銀行日報表

這次贊贊小屋先調整「銀行存款日報表」。工作表上方保留標題、銀行名稱「台北富邦銀行」與「報表期間」,第 7 列的表頭依序是「日期」「摘要」「收入」「支出」「餘額」「備註」。和上一次透過 VBA 自動輸入銀行對帳單資料的做法不同,贊贊小屋直接在第 8 列先寫上 2026/09/30 的「期初餘額」,「餘額」欄填入 67,580.00。原因是上一次的做法會讓期初餘額沒有顯示在日報表裡,這次先把它放好,希望 ChatGPT 設計的 VBA 程式能接著往下填入銀行交易,第二次、第三次匯入也能一直累積。工作表分頁仍是「銀行對帳單」與「銀行存款日報表」兩張。

期初餘額是日報表的計算起點:收入讓餘額增加,支出讓餘額減少,一筆一筆接下去,就形成銀行存款的餘額。如果每次匯入都把舊資料清掉重寫,過去的交易就留不住,所以這次希望程式從既有資料的下一列繼續寫入。這種設計稱為追加式匯入(Append),重點是先找到最後一筆資料的位置,再從那裡接著寫,而不是從頭覆蓋。

Excel 銀行存款日報表在第 8 列保留 2026/09/30 期初餘額的畫面 期初餘額作為起點、追加式匯入逐次累積交易的示意圖

三、在 Excel 直接請 ChatGPT 設計 VBA 程式

在 Excel 的「常用」索引標籤中,功能區右側有一顆「ChatGPT」按鈕,按下後右側會開啟 ChatGPT 窗格。贊贊小屋先切換到「銀行對帳單」工作表,在「新對話」的輸入框裡輸入需求,輸入框上方同時顯示目前選取的儲存格「銀行對帳單 F7 selected」。輸入的內容如下:

> 銀行對帳單其實是從網頁上下載的資料。我希望設計一個 VBA 程式,可以讓我選擇電腦裡面的下載檔案,然後自動把對帳單裡的交易明細依照既定的表格形式,寫入到銀行存款日報表裡面。你可以幫忙設計 VBA 程式嗎?

這段需求交代了資料來自網頁下載的銀行對帳單、希望能自行選擇檔案,以及要寫入既有的銀行存款日報表,但沒有逐一說明兩張工作表的欄位名稱與儲存格位置。

Excel 增益集的優勢是工作簿上下文(Workbook Context):ChatGPT 可以參考目前開啟的工作簿,包括正在查看的工作表與選取的儲存格,所以提問時不必逐欄說明資料的樣子。不過它能讀到的範圍仍受增益集的功能限制,而且仍然需要知道工作的目的。上面的需求說明了資料來自網頁下載、要選擇電腦裡的檔案、要寫入既有的日報表,ChatGPT 才能把看到的資料轉成程式設計需求。工作簿上下文省下的是描述欄位的時間,不是說明目的的責任。

在 Excel 的 ChatGPT 窗格輸入設計 VBA 匯入程式的需求 在 Excel 窗格直接向 ChatGPT 提出 VBA 需求的流程示意圖

四、ChatGPT 辨識兩張工作表的資料範圍

送出需求後,ChatGPT 窗格先出現「Considering VBA design」,接著寫著「我先檢查兩張工作表的欄位與現有格式,再依照目前版型設計可直接貼到 VBA 模組的程式。」畫面標示「Thought for 1m 19s」,也就是思考約 1 分 19 秒後,ChatGPT 回覆「依照目前工作簿格式,來源對帳單欄位在 銀行對帳單!A7:G26,目標日報表欄位在 銀行存款日報表!A7:F8」,再接著列出 VBA 程式。來源範圍 A7:G26 包含第 7 列的表頭與其後 19 筆交易,目標範圍 A7:F8 則是日報表目前的表頭,加上放著期初餘額的那一列。贊贊小屋這次沒有要求重新設計報表,而是沿用現有的版型。

銀行下載檔有「帳務日期」「交易時間」「摘要」「支出金額」「存入金額」「即時餘額」「附註」共 7 欄,日報表則是「日期」「摘要」「收入」「支出」「餘額」「備註」6 欄。兩邊的順序與名稱並不一致,例如銀行的「存入金額」要放進「收入」,「支出金額」要放進「支出」,「交易時間」在日報表裡沒有對應的欄位。這種先決定來源每一欄要放到目的地哪一欄的對照,稱為資料欄位對應(Data Mapping)。ChatGPT 必須先看懂兩邊各欄的意思,才能寫出正確的轉換程式,而不只是把整塊範圍複製過去。

ChatGPT 窗格辨識銀行對帳單與日報表兩張工作表的資料範圍 銀行對帳單七欄對應日報表六欄的資料欄位對應示意圖

五、VBA 物件變數:Workbook、Worksheet 與 Set

贊贊小屋把 ChatGPT 產生的程式貼進 VBA 編輯器的「Module2」,程式從 Public Sub 匯入銀行對帳單到日報表() 開始。要執行時,從編輯器上方選單點選「執行」,再選「執行 Sub 或 UserForm」,快速鍵是 F5。程式開頭先用 Dim 宣告了一批變數,包括代表選檔視窗的 fd As FileDialog、存放檔案路徑的 selectedFile As String,以及三個和 Excel 檔案有關的 srcWb As Workbook、srcWs As Worksheet、destWs As Worksheet,分別代表來源活頁簿、來源工作表與目標工作表。

VBA 的變數大致分成一般資料變數與物件變數。一般變數儲存文字、數字等資料,直接用等號指定;物件變數則是參照 Excel 的活頁簿、工作表等物件,指定時必須使用 Set。兩種變數都可以用 Dim 宣告,差別在於指定內容的方式,下面的示意可以對照:

VBA程式|一般變數與物件變數'一般變數:使用 = 指定數值
Dim amount As Long
amount = 1000

'物件變數:使用 Set 指定物件參照
Dim srcWs As Worksheet
Set srcWs = ThisWorkbook.Worksheets(1)

只用 Dim 宣告物件變數,它還沒有指向任何實際的工作表,必須再用 Set 讓它參照某個物件。要開啟外部的銀行檔案再讀取資料時,用 Set 明確指定來源活頁簿與工作表,就不必依賴「目前作用中的活頁簿」。作用中的活頁簿會隨著檔案開啟而改變,一旦判斷錯誤,資料就可能讀自或寫進錯誤的位置。

VBA 編輯器 Module2 中以 Dim 宣告的物件變數程式碼 Dim 宣告變數與 Set 指定物件參照的差異示意圖

六、使用 FileDialog 選擇銀行下載檔案

程式執行後,Excel 彈出標題為「請選擇銀行對帳單下載檔案」的選檔視窗,視窗開在「下載」資料夾。贊贊小屋在清單中點選剛下載的銀行檔案 20261101211038,視窗顯示它的類型是「Microsoft Excel 97-2003 工作表」,也就是舊式的 .xls 格式,大小為 29 KB。右下角的檔案類型篩選為「Excel 檔案」,確認檔案後按下「確定」。整個過程不需要事先把檔案搬到固定的資料夾,也不用修改程式裡的路徑。

這個視窗由 VBA 的 FileDialog 物件產生。最簡單的寫法如下,只是展示選檔功能的示意,不是這次匯入程式的完整內容:

VBA程式|FileDialog 選擇檔案Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

fd.Title = "請選擇銀行對帳單下載檔案"
fd.AllowMultiSelect = False

If fd.Show = -1 Then
    MsgBox fd.SelectedItems(1)
End If

若程式把檔案路徑寫死,換一台電腦、換一個使用者,路徑就可能不存在;銀行每次下載的檔名與存放位置也未必相同。用 FileDialog 讓人在執行時自己選檔,同一支 VBA 就能反覆處理不同日期下載的銀行對帳單,不必每次改程式。

FileDialog 選檔視窗中選擇銀行下載檔案的畫面 用 FileDialog 在執行時選擇銀行下載檔案的流程示意圖

七、成功匯入 19 筆銀行交易,日報表持續累積

選好檔案後程式開始執行,完成時 Excel 彈出訊息「匯入完成!」,列出「來源檔案:20261101211038.xls」與「匯入筆數:19 筆」。回到「銀行存款日報表」,第 8 列的 2026/09/30「期初餘額」67,580.00 仍然留著,從第 9 列起依序接上 2026/10/05 的電費支出 598.00、2026/10/06 的「CD轉收」收入 21,888.00 等交易,日期、摘要、收入、支出、餘額與備註都已填入。第一筆交易後的餘額是 66,982.00,剛好等於 67,580 減去 598;第二筆加上 21,888,餘額成為 88,870.00。和上一次相比,這次的目的不只是完成單次匯入,而是保留期初餘額,讓後續的交易可以接在同一張日報表裡。

追加式匯入讓日報表可以逐次累積不同日期的交易,也讓重複匯入成為需要自己留意的風險。這次實測只匯入了一份對帳單,沒有連續執行第二次,也沒有驗證程式會不會自動排除已經匯入的交易。同一份對帳單若再匯入一次,同樣的 19 筆交易有可能再接在日報表後面。日常使用時,下一次下載的查詢期間最好接在日報表最後一筆交易之後,避免兩份檔案涵蓋同一天;比較完整的程式也可以在寫入前先檢查該筆交易是否已經存在。

匯入完成訊息與日報表接續期初餘額累積交易的畫面 追加式匯入日報表累積交易與重複匯入風險的示意圖

讓 AI 協助改良既有的 Excel 自動化工具

這次贊贊小屋並沒有重新開發一套程式,而是從上一次使用時遇到的期初餘額問題出發,再請 ChatGPT 協助改良。網頁版附件額度用完時,換一個操作介面,同一個免費帳號就能繼續工作;日報表少了期初餘額,就先把它寫進工作表,再告訴 AI 希望程式保留既有的資料。這些調整都不是一次想得完整,而是在實際操作後發現問題,再請 AI 修改。

AI 縮短了寫程式的距離,但資料對不對、餘額接不接得上,仍然要靠自己對照。這次第一筆交易後的餘額剛好等於期初餘額減去支出,就是最直接的檢查。把這樣的核對留在每一次匯入之後,AI 設計的程式才會慢慢變成可以日常使用的工具。

讓 AI 協助改良既有 Excel 自動化工具並自行核對的示意圖
發布日期:

贊贊小屋 AI 工具教學:

線上課程:ChatGPT課程

ChatGPT 課程特色圖:用 AI 學會 Excel 與 VBA 自動化

分類:AI工具、ChatGPT VBA