跳到主要內容跳到頁尾

Google 試算表巨集:錄一次,之後按快捷鍵重複做

5 分鐘閱讀Lv.3 中級摘要與日期

用「擴充功能」>「巨集」錄下格式設定、貼公式這類固定動作,說明相對與絕對參照的差別、怎麼管理巨集和指定快捷鍵、巨集在 Apps Script 裡長什麼樣,以及巨集做不到的事。

發布 更新

文章目錄

每週匯出的報表,常常要做同一套動作:標題列加粗、換底色、凍結第一列、最後一列補上加總。動作不難,但每週來一遍很煩,也容易漏掉其中一步。

這種「一模一樣的操作」就是巨集(Macro)的工作。你做一遍,Google 試算表把動作錄下來,之後選一下選單或按個快捷鍵就重播。

錄一個巨集

先準備一張很小的表,我用三杯茶的銷量:

AB
品項杯數
蘋果紅茶37
青茶112
烏龍8

步驟如下:

  1. 點「擴充功能」>「巨集」>「錄製巨集」,下方會跳出錄製工具列。
  2. 在工具列先決定參照方式(下一節會講),這邊先選「使用絕對參照」。
  3. 照平常的方式操作:選 A1:B1,按加粗,填上底色。再點 B5,輸入 。
  4. 按工具列的「儲存」,幫巨集取名(我取 HeaderAndTotal),需要的話在這時指定快捷鍵,再按一次「儲存」。

步驟 1:擴充功能 > 巨集 > 錄製巨集,下方出現錄製工具列

圖:錄製工具列會一直開著,直到你按「儲存」或「取消」。

第一次儲存時會跳出授權視窗,要你允許這個試算表的指令碼執行,因為巨集底下其實是 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。

上面那個絕對參照的巨集,內容大致是這樣:

macros.gs
Apps Script
/** @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 方式,因為你知道自己做了什麼動作,可以對照看程式長怎樣。

分享:
喜特先生 Mr. Sheet

喜特先生 Mr. Sheet

數據分析師/商業分析師

八年工作經驗,跨不同業界解決數據需求。做過的案例都整理在作品集。

接下來可以

相關文章

查看所有文章

留言討論

共 0 則留言

訂閱電子報,新文章上線就通知你

免費,隨時可取消。

送出即表示同意服務條款與隱私權政策。