ChatGPT寫VBA:學會3種Excel工作表自動化
ChatGPT寫VBA可以實現用對話設計程式,必須在提示詞把需求敍述清楚,才有可能完成Excel自動化。本文以多個工作表資料合併為例,帶你一次學會3種實用方法。
一、分店銷售明細
範例是台北和台中地區的銷售明細表,假設比較特殊的狀況,只有兩個料號,分別代表不同的商品分類。也許簡單設計函數公式:「=IF(MID(B2,2,1)=”C”,”紅茶”,”奶茶”)」,將紅茶和奶茶區分出來,成為新的報表欄位,方便進行資料分析。
注意到這裡的截圖只有台北,另外一張工作表「台中」也是相同的表格結構,公式設計及思惟也是相同,只是資料有所不同,接下來以此為範例,介紹AI程式設計在這方面的應用。

二、AI程式設計
假設先前已經透過VBA AI生成得到了一套程式碼,作用是在F欄先寫入欄位標題「分類」,然後寫入上個步驟所看到的公式,計算完之後會再轉化成單純的值。
看起來似乎沒有問題,可是實際執行時,目前有兩張工作表,如同上個步驟所看到的,一張是「台北」、一張是「台中」,每次程式執行的結果都是寫到「台中」,實際上是希望寫入「台北」,不太知道是哪裡出差錯了。

三、ChatGPT問問題技巧
針對上個步驟的情況,可以請AI幫忙,只是需要一些ChatGPT問問題技巧的考量。
首先寫入「VBA程式碼」,按住Shift鍵再按Enter鍵換行,接著在提示框中貼上先前步驟有問題的程式碼,再次按Shift鍵加Enter鍵換行,寫入「問題:」,繼續Shift鍵加Enter鍵換行,輸入所遇到的狀況。如此就能完整陳述疑問內容,自己看起來清楚,ChatGPT也容易理解。
具體提問詞如下:
「VBA程式碼:
Sub 分類()
Range(“F1”) = “分類”
lastRow = Cells(Rows.Count, “E”).End(xlUp).Row
Range(“F2:F” & lastRow).Formula = “=IF(MID(B2,2,1)=””C””,””紅茶””,””奶茶””)”
Range(“F2:F” & lastRow).Value = Range(“F2:F” & lastRow).Value
End Sub
問題:Excel兩個工作表,分別為「台北」、「台中」,執行程式後,台中工作表沒有變化,都寫到台北工作表了。」
厲害的ChatGPT馬上幫忙看過,而且立刻解答:之所以都會寫到台北工作表,是因為沒有指定的緣故,VBA預設會寫入目前的工作表,這樣就百分之百回答了疑問。

四、VBA選定工作表
首先來看ChatGPT提出的第一個方法——「進去前先選定工作表」,它的意思是在執行程式的一開始,就先指定要在哪一個工作表上執行。
這裡會看到Set s =,它的作用便是指定某張工作表。接下來注意到一個關鍵字With,它意思是要針對特定對象執行一連串的指令,set和with組合起來,類似於先選擇某個工作表,然後在儲存格上進行一系列操作。所以這裡的結構With ws表示針對ws這個對象執行程式,中間是一連串的程式語句,最後一行是End With。
注意在With語句裡面,原本的Range前面會多一個英文的句點,這個可以把它想作是代名詞,代表ws,結合起來就是該工作表上的儲存格範圍,如此就達到了「執行前先選取工作表」的效果。
通常在ChatGPT寫程式的時候,會認為使用With語句更有效率,因為程式執行時,會把這個工作表物件取出來進行操作,針對這個特定對進行多項不同操作,然後再放回去,實質上只存取一次。如果沒有With包裹起來,就會每次取出放回、再取出放回,有幾項操作就打開抽屜幾次,當然會造成執行效率降低。
另外,在上個步驟中,Range前面沒有句點,其實是省略了主詞,而且省略主詞的時候,預設是目前選取的工作表。這正是造成文章一開始程式出錯的原因,也許選取的是「台中」工作表,但希望程式執行「台北」工作表。

五、集合迴圈流程
接下來看ChatGPT AI Excel提供的第二種方法。雖然問題的重點是要寫入「台北」,但也可以理解為希望兩張工作表都寫入,因此AI提供了另一種方法。
這裡用到了兩個很好用的技巧。首先For Each是集合迴圈,針對某一組對象中的每一項依序執行程式語句。這裡的對象組是利用集合函數Array建立的,由「台北」和「台中」兩個文字組成的資料組,將它寫到Worksheets裡面,代表「台北」與「台中」兩張工作表。
第一次接觸集合迴圈與集合資料,也許會覺得有些複雜,但是有了基礎觀念之後,多次應用,逐漸就會生根茁壯。學習VBA或程式設計其實就跟學習函數一樣,重點是瞭解越多程式語法(函數)越好,就能依照場合選擇適合的方法。
此處目的是「選取多工作表並統一執行程式」,可以把它當作是一種特殊的英文文法,只要要用到這個功能,就照這個句型造句即可。
提出兩種方法之後,ChatGPT最後的提問是:「是否希望只在台中執行一次,還是兩張表都要處理?」這真是一個貼心的疑問。

六、ChatGPT寫VBA
ChatGPT寫VBA的好處是可以多方嘗試,以不同角度瞭解可能的設計方法,AI很多時候也會補充建議,過程中完全不用擔心AI嫌麻煩,因此能夠短時間擴充自己的視野,在比較全面性掌屋相關性知識之,最後再依照實際需求提問。
以本文範例而言,ChatGPT在上個步驟是詢問使用者需求,既然AI如此願意幫忙,最後提出真正需求:
「我是希望所有工作表都要處理。」
它以非常口語方式確認需求:「如果你要「所有工作表」都處理,就不用寫死「台北」「台中」兩個名字」。接著ChatGPT寫Excel巨集提出相對應解法,專業術語稱為「迴圈整本活頁簿」,意思是針對活頁簿中的每一張工作表,從頭到尾依序執行相同程序,具體的程式語句為:「For Each ws In ThisWorkbook.Worksheets」。

七、VBA編輯代碼
再次將AI程式碼複製貼上到VBA編輯器,修改Sub程序名稱為「台中台北」與「所有」,分別代表兩個特定工作表與所有工作表的程式,兩個ChatGPT指令生成器可供執行,如此兩相比較,更加清楚這兩種用法的差異。
另外,目前活頁簿專案中有新增了一個「高雄」工作表,也許是單純為了測試,也有可能實務上真的存在這個狀況。

八、程式執行測試
執行程式,果然「高雄」工作表也有函數計算後的欄位,雖然截圖中沒有顯示,但「台北」與「台中」同樣都有資料寫入,完成了這次ChatGPT Excel自動化的任務。
如此確實達到了ChatGPT說明的效果——在活頁簿中所有工作表都執行了同樣的該程式。

三種工作表操作的VBA技巧
這篇文章透過範例設計與ChatGPT補充,學到了目前工作表、多個特定工作表與所有工作表的程式操作方法。其實還有其他VBA自動化的工作表技巧,但這三種方式大致涵蓋了實務上會遇到的狀況,已經相當足夠了,因此很值得將這些關鍵句型筆記起來,有時候真的會派上用場。
學會計、學Excel、學習AI工具,歡迎加入贊贊小屋社群。
AI工具大全:8種不同功能用途和30個應用清單
ChatGPT怎麼用?、ChatGPT Excel教學、Gemini是什麼?、Notion教學、AI對會計的影響。
贊贊小屋AI課程:ChatGPT課程、AI工具全攻略、Notion課程。

