每週匯出的報表,常常要做同一套動作:標題列加粗、換底色、凍結第一列、最後一列補上加總。動作不難,但每週來一遍很煩,也容易漏掉其中一步。
這種「一模一樣的操作」就是巨集(Macro)的工作。你做一遍,Google 試算表把動作錄下來,之後選一下選單或按個快捷鍵就重播。
錄一個巨集
先準備一張很小的表,我用三杯茶的銷量:
| A | B |
|---|---|
| 品項 | 杯數 |
| 蘋果紅茶 | 37 |
| 青茶 | 112 |
| 烏龍 | 8 |
步驟如下:
- 點「擴充功能」>「巨集」>「錄製巨集」,下方會跳出錄製工具列。
- 在工具列先決定參照方式(下一節會講),這邊先選「使用絕對參照」。
- 照平常的方式操作:選
A1:B1,按加粗,填上底色。再點B5,輸入 。 - 按工具列的「儲存」,幫巨集取名(我取
HeaderAndTotal),需要的話在這時指定快捷鍵,再按一次「儲存」。
圖:錄製工具列會一直開著,直到你按「儲存」或「取消」。
第一次儲存時會跳出授權視窗,要你允許這個試算表的指令碼執行,因為巨集底下其實是 Apps Script。確認是自己的試算表之後,按「允許」即可。
錄完之後,到「擴充功能」>「巨集」,清單裡就會看到 HeaderAndTotal,點它就會重播一遍。
相對參照和絕對參照
這是錄巨集最容易搞混的地方,錄製工具列上有兩個選項。
- 使用絕對參照:巨集永遠動「你錄的那幾格」。錄的是
A1加粗,之後不管你選在哪,它都只會把A1加粗。 - 使用相對參照:巨集動「現在選取的位置」和它旁邊的格子。錄的是「選取格加粗,往右一格也加粗」,之後選在
C1重播,就會是C1和D1被加粗。
那 HeaderAndTotal 該選哪個?標題一定在 A1:B1、加總一定在 B5,所以我選絕對參照。反過來,如果是「在目前這格填上今天的日期並加底色」,我會選相對,因為每次要填的地方都不一樣。
圖:錄的時候先選好,錄到一半換不太方便,我通常會取消重來。
管理巨集和指定快捷鍵
點「擴充功能」>「巨集」>「管理巨集」,會看到所有已儲存的巨集。每個巨集可以:
- 改名。
- 指定快捷鍵。
- 按右邊的「更多」刪除,或選編輯指令碼,直接跳到 Apps Script 編輯器。
改完記得按「更新」才會存。
快捷鍵的格式是 Ctrl+Alt+Shift+數字(Windows 在 Chrome),Mac 為 Cmd+Option+Shift+數字。依官方說明,每個試算表最多 10 個巨集可以指定快捷鍵,也就是數字 0 到 9,而且不能重複。第 11 個巨集之後就只能從「擴充功能」>「巨集」的選單執行。
我自己只會替每週都用的兩三個巨集設快捷鍵,其他都從選單點,因為數字記不住。
巨集在 Apps Script 裡長怎樣
錄好的巨集會變成一個函式,放在這份試算表綁定的 Apps Script 專案,檔案叫 macros.gs。想看的話,從「管理巨集」編輯,或點「擴充功能」>「Apps Script」,在左邊檔案清單找 macros.gs。
上面那個絕對參照的巨集,內容大致是這樣:
/** @OnlyCurrentDoc */
function HeaderAndTotal() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1:B1').activate();
spreadsheet.getActiveRangeList().setFontWeight('bold')
.setBackground('#e8ece6');
spreadsheet.getRange('B5').activate();
spreadsheet.getCurrentCell().setFormula('=SUM(B2:B4)');
};逐行看一下:
SpreadsheetApp.getActive()取得目前這份試算表。getRange('A1:B1').activate()就是「選取A1:B1」,絕對參照的巨集裡寫死儲存格位址。setFontWeight('bold')加粗,setBackground(...)填色。setFormula(...)把公式字串寫進目前儲存格。
第一行的 @OnlyCurrentDoc 註解,是告訴授權畫面只需要這一份文件的權限,不用整個雲端硬碟。
如果錄的是相對參照,程式會改成從 getCurrentCell()(目前選取的格子)出發,再用 offset 算位置。位址不再寫死,這就是兩種模式的差別。
另外,指定的名稱與快捷鍵會記在專案的 appsscript.json 設定檔。巨集函式本身不吃參數、也沒有回傳值,這點在下面的限制會再提到。
既然是 Apps Script,你可以直接改這個函式,例如把 B5 改成別的格子,再回「管理巨集」看有沒有生效。
巨集做不到的事
- 綁在那一份試算表。 巨集只存在於錄它的試算表,換一份檔案就沒有。官方說明提到,巨集定義只在綁定在試算表上的指令碼有效,獨立指令碼與函式庫不能發布巨集。要搬到新檔案,先複製整份試算表,或把程式碼複製到目標試算表的綁定專案,再於目標檔選「匯入巨集」登錄函式。官方巨集說明中的匯入,是把目前綁定專案已有的函式設為巨集;它不會直接從另一份試算表搬程式。
- 只錄得到介面操作。 錄的是你在試算表裡按的動作,像寄信、讀別的檔案、定時執行,錄不出來,要自己寫 Apps Script。
- 沒有判斷與迴圈。 錄出來的函式是照時間順序一路做下去,要「欄位是空的就跳過」得自己改程式碼。
- 不會自己跑。 巨集一定要人點選單或按快捷鍵。想要每天早上自動跑,要改用 Apps Script 的時間觸發條件。
- 巨集函式不吃參數、也沒有回傳值。 錄出來的函式沒有參數,也不會回傳結果。
- Google 家族只有 Sheets 有。 Google 文件、簡報和表單沒有錄製巨集這個選單。Excel 也有錄製巨集,但存成的是 VBA,和 Sheets 的 Apps Script 是兩套系統。
- 這篇只講電腦版。 錄製與管理巨集都是在電腦版操作,上面的步驟以電腦版為準。
如果你的需求只是「讓公式自動往下算」,先看 建立自動化工作流程,很多事情用公式就解決了,不用動到巨集。
錄完的下一步
我的習慣是先錄,再打開 macros.gs 看一遍,順手把寫死的位址改成真正需要的範圍。錄製是最快的學 Apps Script 方式,因為你知道自己做了什麼動作,可以對照看程式長怎樣。
接下來可以
相關文章
查看所有文章建立自動化工作流程:讓資料自己流動
把資料流拆成原始、清理、彙總、報表四站,用 ARRAYFORMULA 和 QUERY 讓新資料進來後自動往下算,再用設定頁的開關與報表月份控制報表,最後複製成下個月的範本。
Google 試算表快捷鍵速查:Windows 與 Mac 對照
整理 Google 試算表常用快捷鍵,每一個都附 Windows 與 Mac 按法,依官方說明中心核對,並建議先練哪 5 個。包含貼上值、向下填滿、F4 切換參照、轉換為表格與 Ctrl+/ 叫出快捷鍵清單。
Apps Script 匯入對帳檔:同一份檔案重跑,不會多出重複列
每天收到的對帳檔有時重複寄、有時改過金額。以交易編號比對舊資料,只新增沒見過的列,內容不同的放進待確認分頁,重跑結果不變。附完整範例與執行結果。
留言討論
共 0 則留言


