ChatGPT VBA公式:1個善用Excel函數的方法
ChatGPT VBA公式可以快速進行資料處理,過程中多多善用熟悉的Excel函數,本文以員工年資計算為範例,介紹如何利用AI生成VBA,用最熟悉的方式自動化編製報表。
一、員工年資計算
範例是一個年資計算報表,其實員工的到職日期後面的四個欄位:到職日、到職當月、年資(月)、年資(年),都是函數公式進行的計算,而且都是依照員工到職日得到的。這個跟實務情況是一樣的,本來員工年資就是依照到職日期計算即可,只是中間計算的過程稍微複雜。
例如,也許公司有統一規定,15日之前到職,當月也會計算年資一個月,超過15日之後,就從下個月開始起算。另外,通常是年資,但有蠻多時候是會依照幾個月進行計算,因此特地再把年資換算成月數。
正式報表旁邊有附上函數公式的表格,算是提供參考,同時可以知道設計這類函數公式不是那麼容易,不過既然已經有公式了,接下來介紹如何進行這方面的AI程式設計應用。

二、ChatGPT VBA公式
ChatGPT VBA公式是將容易上手的Excel函數跟方便的AI工具結合,同樣是設計程式,但是使用自己比較熟悉的語言,比較看得懂,比較能夠靈活應用。
上個步驟的函數公式雖然有點難度,但對於一般Excel使用者而言,Excel函數公式通常都是可以入門的技能,可是如果要設計VBA程式的話,門檻就真的比較高一些。
於是有個想法,既然設計Excel公式相對簡單,那麼乾脆,將公式跟VBA自動化結合在一起!提升ChatGPT AI Excel的技巧高度。
這個想法很好,可能不知道怎麼實現,像這種麻煩事,交給最厲害的ChatGPT,具體提問如下:
「想在Excel儲存格E2到E11寫入公式:=DAY(D2),如何設計VBA程式。」
AI每次設計程式之前,都會再次確認需求,同時也是提示它即將設計的內容。這個部分很重要,建議一定要仔細閱讀,尤其是對於VBA程式代碼陌生的提問者,以閱讀方式瞭解程式設計方向,能夠有效確認所設計的程式是否符合需求。
此處ChatGPT說明是把公式填入到A2到A11,並且讓公式中的列號自動隨函數變動,確實是想要得到的結果。
它提出兩種方法,截圖所見的第一種程式碼應該比較容易理解,而且也是很簡單,只有一句:「Range(“E2:E11”).Formula = “=DAY(D2)”」,可以放心複製程式碼。

三、FormulaR1C1
ChatGPT所提出的第二種方法,其實就是Excel中的R1C1欄名列號表示法,只是在Excel直接引用非常方便,不需要額外操作,所以很少用到R1C1方式。
不過如果是設計VBA程式,有些時候相對位置會比較方便,這裡可以稍微瞭解其語法。
另外AI還有提到非常實用的計算後直接寫入數值,而不是保留公式。如此能避免工作表公式過多造成Excel卡頓的情形,原來只要這麼一句程式,達到想要的ChatGPT寫Excel巨集效果,可以讓函數計算式的結果變成單純數值。

四、執行VBA程式
首先,先將ChatGPT所提供的程式碼貼到VBA編輯器,在此想要依照ChatGPT補充,將計算結果轉化成單純值。在兩種函數的方法中,希望採取簡單的第一種,但是在AI的程式代碼中,是使用第二種方法和公式值化合在一起,第一種方法反而沒有公式值化的設計,因此必須進一步處理。
既然可以把程式碼從ChatGPT貼到VBA編輯器,當然也能直接在編輯器複製貼上,有點像是移花接木,把原本的第二種方法改成第一種方法,保留公式值化的語句。在這個過程中,等於是重組ChatGPT提供的程式碼。如果很多時候都是使用AI所提供的代碼,顯然這是個蠻方便的技巧。
得到真正想要執行的程式碼之後,將滑鼠游標停在ColumnE這個Sub程序的代碼區塊中,右上角會看到目前選取的程序,這個時候就可以將工具列中的「執行」下拉,點選其中的「執行」,快捷鍵是「F5」,如此便可以啟動ChatGPT Excel自動化的操作。

五、確認執行結果
簡單修改好了程式之後,回到Excel驗證執行結果,果然VBA AI生成完畢,和公式「(DAY(D2)公式計算結果相同,而且是單純值,類於於自己手工更新公式並值化。
在此仍然是先備份工作表之後再執行程式,並且跟先前第一步驟相同,已經把公式事先寫在工作表其他地方,等於是把最核心的公式計算保留起來。

六、自動調整範圍
目前已經能在特定範圍的欄位裡面寫入公式並轉換為數值,第一階段完成,執行確認沒有問題之後,接下來要將程式代碼進一步優化。
一方面,實務上報表範圍有可能會新增,或者資料有所變動;另一方面,就算資料本身沒有變動,系統下載的報表每次列數不一樣,還有可能是不同項目的報表,但是結構相同。因此希望能以相同方式執行。
簡單地說,如同這裡ChatGPT AI應用的提問:
「程式:
Sub ColumnE()
Range(“E2:E11”).Formula = “=DAY(D2)”
Range(“E2:E11”).Value = Range(“E2:E11”).Value
End Sub
需求:
資料筆數可能增減,請將E11改成依照資料列數自動調整。」
AI擁有無人可及的豐富經驗,表示瞭解需求,立即修改調整。參考程式碼中的註解,可以知道它會做什麼:寫入之前先確認目前報表有多少列,根據所得到的資訊進行後續操作。如同設計函數公式有時候會利用到輔助欄或者輔助儲存格,用意也是預先確定相關資訊,之後再進行真正的計算。
另外還可以注意到,雖然在需求中沒有提出,但是ChatGPT有幫忙加上條件判斷:「如果至少有第2列,就填公式」。也就是第列有資料才會寫入公式,一方面可以知道是避免錯誤,另一方面依照ChatGPT作法,大部分人在寫這一類程式常會需要像這樣的判斷,所以AI在設計的時候,也許沒有需求,也會將它加進來。因為如果沒有對應資料,程式根本無法進行計算,徒增困擾,沒有意義。

七、AI程式如何精簡
經過上個步驟ChatGPT問問題技巧的適當應用之後,複製AI提供的程式碼,貼到VBA編輯器,這裡會更清楚看到,它會先依照目前報表有多少筆資料,而且是有資料才開始寫入公式,所以有個判斷語句。
瞭解程式碼之後,當然可以自己照樣造句,或者自行編輯優化。例如,假設原始資料都是系統跑出來的,而且系統產生報表時就會幫忙判斷,沒有資料跑不出報表,所以其實程式判斷偵錯並不需要,在這裡把If跟End If去掉,如此程式精簡直觀。退一步說,就算覺得自己修改不太好,也可以請AI幫忙修改。

八、多欄公式擴展
單欄程式設計進入狀況之後,程式代碼只要照樣造句,很容易可以擴展到多欄。
實際做法就跟Word編輯文字一樣:先複製整個ColumnE2程式文字,按Enter鍵換行到下方,複製貼上,將Sub名稱改為ColumnEH,然後複製公式語句,將「E2:E」改成「F2:F」,表示目前要寫入F欄公式,把原本E欄的公式改成F欄的公式。
這裡有個注意事項,Excel公式在VBA本來就是一段文字,前後都有雙引號,但是Excel公式中的文字也用雙引號表示,因此在VBA裡面的Excel公式中的文字要在前後都加上兩個雙引號,例如「””M””」,如此可以避免混淆,幫助程式有效執行。
最後再將公式值的轉換範圍跟著修改,因為原本程式碼只有到E欄,要把原本的「E2:E」改成「E2:H」,如此修改完成,等於是搭配ChatGPT寫程式進一步自行優化。

九、完成專案任務
最後測試程式,果然很順利,報表一次多了好幾欄的資料。程式執行很快,看不到中間過程,但因為是自己有參與設計修改的程式,知道其實是將多欄範圍寫入公式,計算之後轉換為純粹的數值,等於是借助Excel函數進行VBA自動化資料整理。
反過來說,如果是執行別人寫好的專案程式,也許看不到或不知道程式碼,只見得刷一聲,很神奇地執行一連串的資料處理,或者是操作比較複雜的Excel工具,例如樞紐分析表,在這篇文章的基礎上,可以體會原來都是程式一行一行寫出來的VBA自動化專案。

AI時代應培養能力
這篇文章在操作的過程中,理解ChatGPT提供的程式再進行修改調整,這個過程是AI時代應該培養的能力。第一版草稿AI都可以幫忙寫了,如同真正的工作助理,使用者或者主管要做的,並不是照抄程式,而是要具備理解程式的能力,才能依照情況需求進行修改,得到想要ChatGPT指令生成器結果,這也是贊贊小屋文章和課程會著重的地方。
學會計、學Excel、學習AI工具,歡迎加入贊贊小屋社群。
AI工具大全:8種不同功能用途和30個應用清單
ChatGPT怎麼用?、Gemini是什麼?、Notion教學。
贊贊小屋AI課程:ChatGPT課程、AI工具全攻略、Notion課程。

