一、前言 當我們在使用Excel時,常會遇到須要大量重複執行單一動作的狀況。此時,我們就可以藉由「巨集」或「VBA」的方式,讓系統自動幫助我們完成這些動作。本次課程將先告訴大家,什麼是「巨集」?它與「VBA」又有什麼關係?最後,我們也將介紹兩種產生巨集的方式,幫助大家提升工作效率。 二、巨集(Macro)與Visual Basic for Application(VBA) 「巨集」(Macro)是一切自動化指令,可以在應用程式中執行特定任務,常見於Microsoft Excel 等應用程式中。Visual Basic for Application(VBA)是一種以Visual Basic語法為基礎的程式語言,專門用於自動化Office應用程式中的操作。簡言之,巨集與VBA的關係便是,巨集是自動化操作的結果,而VBA則是記錄這些操作的底層程式語言。簡單來說,假設我們是一名超商店長,但因為一個人忙不過來,所以決定聘請大學生來幫忙結帳的工作。當我們第一次教他如何結帳時,我們會請他寫筆記,紀錄結帳的流程,而該學生則以其母語中文寫筆記。若將此概念用來解釋巨集與VBA的關係,則可將大學生想成一個名為「Office」國家的Excel。現在因為我們要於Excel中執行大量且重複的工作,因此我們要將這個工作流告訴「Excel」學生,讓它整理出一個「巨集」,也就是執行該工作的工作流,而它所用來寫筆記的語言即為「VBA」。 簡言之,「VBA」是一種語言,可以協助Excel寫出一份完整筆記,而這一份可以讓系統依其操作的筆記,就稱之為「巨集」。產生巨集的方式有兩種,包含:透過錄製,再進行修改,以及直接將模組打開撰寫VBA來完成。第一種比較適合入門,GPT就是第二種,我們只要給它需求,它就會幫我們寫出程式碼。 三、實戰演練 產生巨集的方式有兩種,其一為透過「錄製」或直接將模組打開撰寫VBA來完成。此方式較適合剛入門的新手。第二種方式則是請ChatGPT依照我們的需求寫出程式碼。接下來,我們將分別告訴大家,如何使用這兩種方式取得巨集。 1.錄製巨集 首先,我們可以直接利用Excel內的「錄製巨集」產生一個工作流。由於此功能位於「開發人員」功能區,因此若大家的Excel工作列中沒有「開發人員」選項,則可以先點選「檔案」進入「選項」,接著選擇左側的「自訂功能區」,右方可以看到「開發人員」,接著只要打勾後按下「確定」,即可在Excel中打開「開發人員」。 現在假設我們有一個名為「原始資料」的Excel工作表,裡面有五張表格,分別為「1980年Q1」、「1980年Q2」、「1980年Q3」、「1980年Q4」、「1981年Q1」。現在我們想要將每一個表格分成一張新的工作表。一般我們在進行這項任務時,要先「選取資料並複製」表格,「增加新的工作表」並「貼上資料」,再「切回原工作表」將「作用中的儲存格移至下一個表格的標題」,藉由反覆這樣的行為完成我們想要分成5個工作表的任務。不過,其實這樣需要不斷重複的工作,我們可以藉錄製巨集來幫助我們完成此任務。 我們首先要點選「開發人員」,並選擇「錄製巨集」開始將上述的工作流錄製起來形成一個巨集(如下圖)。在命名巨集名稱時,中英文皆可使用,但英文優於中文名子,因為中文名稱在不同語言的Excel中可能會有編碼的問題。另外,若名稱中有數字,則數字不可在最前面。當我們取完名稱後,就可以按下「確定」開始錄製巨集囉!在錄製巨集時,我們要注意錄製過程和時間長短沒有關係,而是跟我們的動作有關係,只要我們做了一個動作,它就會記下來。因此,錄製巨集時須盡量避免做錯動作,並力求動作乾淨俐落。 圖示:我們可以在Excel中的「開發人員」找到「錄製巨集」的功能。 錄製巨集時,我們要先點擊第一個表格的標題,並利用「Ctrl+Shift+↓」選取表格。接著,我們可以利用「常用功能區」中的「複製」或「Ctrl+C」複製表格,再新增一張工作表將表格貼上。完成後,回到「原始資料」,由於我們接著要跳到下一個工作表,所以要點擊兩次「Ctrl+Shift+↓」到下一個表格的標題區完成錄製巨集。接下來,我們可以在「開發人員」功能中找到「Visual Basic」,並於「Visual Basic」中檢視剛剛錄製的巨集程式碼。由於我們希望Excel可以重複我們所錄製的動作,所以我們要加入「If語法」或「While迴圈語法」。 若我們想使用If語法,則要先選取工作流的程式碼,並點選「TAB」或頁面上的「縮排」。縮排完成後,於程式碼開頭輸入If ActiveCell.Value <> "" Then。此語法中,「<>」代表不等於,「""」代表「空白儲存格」,因此此句語法表示,如果點到的儲存格不是空白,就進行我們的工作流。接著,若巨集名稱為「SplitTable」,則我們要在工作流程式碼最後加上Call SplitTable,接著換下一行輸入End If,代表「如果是空白儲存格,那麼就結束執行」,即可完成巨集。利用If語法的程式碼如下: 圖示:利用「If語法」撰寫的巨集。 若我們想使用「While迴圈語法」,則可以在程式碼開頭輸入While ActiveCell.Value <> '''',並在最後加上Wend即完成巨集。利用「While迴圈語法」之程式碼如下: 圖示:利用「While迴圈語法」撰寫的巨集。 2.利用ChatGPT產生程式碼 使用ChatGPT產生程式碼非常簡單。我們只要輸入以下指令:「請寫一段Excel VBA程式碼。目前工作表中有多個表格,連續的資料為1個獨立表格,表格和表格之間有空白列隔開,請以此規律,將每一個表格拆分成一張新的工作表,工作表的名稱以原本表格的第1個儲存格內容來命名。」ChatGPT接著就會幫我們產生一串程式碼。當我們在詢問ChatGPT時,可以將任務內容仔細描述,講得愈仔細,結果就愈符合我們需求。 接下來,我們再回到Excel並打開「Visual Basic」。進入「Visual Basic」頁面後,選擇「插入」將模組插入,並將ChatGPT寫的程式碼複製貼上。此時,我們可能會發現貼上的程式碼出現許多綠色的問號,它們是ChatGPT撰寫的程式碼中的註解。若出現這個問題,我們可以先在電腦上新增一個記事本。打開後先確認右下角的編碼為「UTF-8」,並將程式碼貼上,存檔後關掉。接著重新打開並複製記事本中的程式碼,再開啟一個Word檔將程式碼貼上,並將Word檔中的程式碼複製貼上至VBA就可以成功排除亂碼囉! 最後,如果我們想瞭解ChatGPT寫的程式碼,那麼可以請它為程式碼加上註解。若在執行時發生程式碼錯誤,則可以再將錯誤部分傳回ChatGPT請它幫忙修正。必須注意的是,在貼上新程式碼前,一定要記得點選VBA頁面上的停止符號。 四、結語 透過「錄製巨集」或請ChatGPT依照需求,幫助我們撰寫VBA,就可以讓我們快速地在Excel上快速完成大量且重複的任務。如果大家想要更深度瞭解本次課程中使用的程式碼,歡迎大家觀看課程回放影片,觀看完整的程式碼解說喔!