スプレッドシートのマクロとカスタム関数|Google Apps Script入門(2)

Google
この記事は約24分で読めます。

ーーーーーーーーーーーーーーーーーーーーー2026年4月18日執筆ーーーーーーーーーーーーーーーーー

記事のPodcast

下記のPodcastは、Geminiで作成しました。

はじめに

Google Apps Script(GAS)は、Google Workspaceの利便性を飛躍的に高めるクラウドベースのJavaScriptプラットフォームです 。前回の入門(1)では、エディタの基本操作と単純なメッセージ表示を学びましたが、今回の入門(2)では、実務において最も即効性のある「マクロ」と「カスタム関数」の深淵に迫ります。

2026年現在、Google Apps Scriptを取り巻く環境は劇的な進化を遂げています。長年利用されてきたRhinoランタイムは2026年1月31日をもって引退し、モダンなV8ランタイムへの完全移行が果たされました 。さらに、生成AI「Gemini」の統合により、コードを書くプロセスそのものが「AIとの対話」へと変貌を遂げています

本記事では、初心者がつまずきやすいポイントを丁寧に解説しつつ、2026年時点での最新仕様に基づいた自動化のノウハウを網羅的に提供します。

マクロの記録:ノンコーディングで始める自動化

マクロの記録機能は、ユーザーがスプレッドシート上で行った一連の操作を、GASのコードとして自動生成する強力なツールです 。プログラミングの知識がなくても、日常の定型業務をボタン一つで実行できる形に変換できます。

マクロ記録のメカニズム

マクロを記録すると、Googleスプレッドシートはユーザーのクリックや入力をリアルタイムで追跡し、それをSpreadsheetAppサービスを利用した関数へと翻訳します 。このコードは、シートにバインドされた(紐付けられた)プロジェクト内のmacros.gsというファイルに自動的に書き込まれます

記録時には、以下の2つの参照方式を選択する必要があります。

参照方式特徴活用例
絶対参照記録時と同じ特定のセル(例:A1)に対して常に操作を実行します シートの特定のヘッダー部分を常に固定のデザインに整える場合。
相対参照現在選択しているセルを基準に、相対的な位置で操作を実行します 選択したデータの1行下に合計行を追加し、書式を設定する場合。

マクロ作成の実践手順

具体的な操作手順は以下の通りです

  1. スプレッドシート上部の「拡張機能」メニューから「マクロ」>「マクロを記録」を選択します。
  2. 参照方式(絶対または相対)を選択し、自動化したい一連の操作(書式設定、列の挿入、数式の入力など)を実行します。
  3. 操作完了後、ダイアログの「保存」をクリックし、マクロに名前を付けます。
  4. 任意でショートカットキー(Ctrl+Alt+Shift+数字)を割り当てます 。

記録されたマクロは、一度保存してしまえば、他のセル範囲を選択した状態で実行することで、同一の複雑な処理を一瞬で再現できるようになります

スクリプトエディタでのマクロ編集

自動記録されたマクロは、そのまま使うだけでなく、スクリプトエディタで直接修正を加えることで、より汎用性の高いツールへとアップグレードできます

macros.gsの構造と編集

「拡張機能」>「Apps Script」を開くと、自動生成されたコードを確認できます 。例えば、ヘッダーに青い背景色を設定するマクロは、以下のようなコードになります。

JavaScript

/** @OnlyCurrentDoc */
function headstyle() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  // 現在の選択範囲の背景色、文字色、太字、サイズを一括設定
  spreadsheet.getActiveRangeList().setBackground('#afeeee')
  .setFontColor('#191970')
  .setFontWeight('bold')
  .setFontSize(12);
  // 1行目を固定
  spreadsheet.getActiveSheet().setFrozenRows(1);
};

このコード内のカラーコード(#afeeee)やフォントサイズ(12)の数値を直接書き換えるだけで、マクロ全体の動作を瞬時に変更可能です 。これは「プログラミングを学ぶ第一歩」として非常に優れた方法です。

マニフェストファイル(appsscript.json)

マクロのショートカット設定や実行権限は、プロジェクトの「マニフェストファイル」という設定ファイルに格納されています 。2026年のエディタでは通常隠されていますが、プロジェクト設定から「『appsscript.json』マニフェストファイルをエディタで表示する」にチェックを入れることで閲覧・編集が可能になります

マニフェスト内では、sheetsプロパティの下にマクロのメタデータが定義されています

JSON

{
  "sheets": {
    "macros":
  }
}

直接このJSON構造を編集することで、UIを介さずにマクロの挙動やショートカットを管理することができます。

カスタム関数:独自数式の開発

スプレッドシートには数百の組み込み関数がありますが、特定の業界特有の計算や、複雑なロジックを必要とする場合、自分だけの「カスタム関数」を作成するのが最もスマートな解決策です

カスタム関数の作成と基本ルール

カスタム関数は、JavaScriptで定義されたグローバルな関数です 。スプレッドシートのセルに=MY_FUNCTION()のように入力して呼び出します

作成時の重要なルールは以下の通りです。

  • 命名規則: 組み込み関数(SUMなど)と重複してはいけません 。また、末尾をアンダースコア(_)で終わらせることはできません(プライベート関数と見なされるため) 。
  • 決定論的であること: 関数の引数は計算のたびに結果が変わるもの(RANDNOWなど)を渡してはいけません 。
  • 制限時間: 1回の呼び出しにつき、30秒以内に結果を返す必要があります 。

実践例:円の面積を計算する関数

数学的な計算を行う関数の例として、半径を受け取って面積を返すcircleArea関数を作成します

JavaScript

/**
 * 与えられた半径から円の面積を計算します。
 *
 * @param {number} radius 円の半径。
 * @return {number} 円の面積。
 * @customfunction
 */
function circleArea(radius) {
  // Math.PIを使用して正確な円周率を取得
  return Math.PI * Math.pow(radius, 2);
}

このコードにおいて、/**... */で囲まれた部分は「JSDoc」と呼ばれます 。特に@customfunctionタグを含めることで、スプレッドシートのセルに入力する際、関数の候補リストに表示される(オートコンプリート)ようになります

戻り値の多様性:単一値と配列

カスタム関数は単一の値を返すだけでなく、2次元配列を返すことで、複数のセルに跨る結果を表示させることも可能です

JavaScript

function GENERATE_SEQUENCE(start, end) {
  var result =;
  for (var i = start; i <= end; i++) {
    result.push([i]); // 1列のデータとして返す
  }
  return result;
}

これをセルで=GENERATE_SEQUENCE(1, 5)と実行すれば、指定した範囲に連続した数値が展開されます

2026年の技術標準:V8ランタイムとAI統合

2026年、GAS開発において最も大きな変化は「モダン化」と「知能化」です

Chrome V8ランタイムへの完全移行

かつてのRhinoランタイムは廃止され、現在は全てのスクリプトがChrome V8上で動作します 。これにより、モダンなJavaScript(ES6+)の構文が全面的に利用可能になりました。

機能従来の書き方 (Rhino)モダンな書き方 (V8)メリット
変数宣言varconst, let 意図しない再代入を防ぎ、バグを抑制します。
関数定義function(x) {... }(x) => {... } 記述が簡潔になり、thisの扱いが明快になります。
文字列結合'Hello ' + name`Hello ${name}` 読みやすく、複雑なテンプレートも容易に扱えます。
非同期処理(限定的)async / await外部通信を伴う処理が整理された構造になります。

Geminiとの共生(Vibe Coding)

2026年のGAS開発では、コードを一行ずつ書くスタイルから、AIに意図を伝えて生成させる「Vibe Coding(バイブ・コーディング)」へとシフトしています 。エディタ右側のGeminiパネルに「この列にある住所を緯度経度に変換するカスタム関数を書いて」と入力するだけで、最適なコードが提案されます

さらに、スプレッドシート上では=AI()または=Gemini()というネイティブ関数が一般公開されており、GASを一行も書かずにテキスト生成、要約、感情分析、さらにはWeb上の最新情報の取得が可能になっています

比較:GASカスタム関数 vs 名前付き関数 vs AI関数

現在、スプレッドシートで独自の機能を実現する手段は3つに大別されます。それぞれの特性を理解し、適切に使い分けることが重要です

比較項目GASカスタム関数名前付き関数AI関数 (=AI)
難易度中(JavaScript知識が必要)低(既存数式の組み合わせ)極低(自然言語で指示)
主要用途複雑なロジック、外部API連携頻繁に使う数式の再利用テキスト解析、要約、リサーチ
実行速度中(サーバー呼び出しを伴う)高(スプレッドシート内で完結)低(AIモデルの推論を伴う)
制限事項30秒の実行制限数式制限内で動作1日あたりの生成量制限
認証初回実行時に承認が必要不要Workspace契約プランに依存

パフォーマンスと制限:実務で避けるべき罠

初心者が大規模なスプレッドシートにマクロやカスタム関数を導入すると、動作が極端に重くなる「パフォーマンスの壁」に直面することがあります

サービスの過剰呼び出しの抑制

GASにおいて最も時間がかかる処理は、スプレッドシートのセルとのやり取りです 。例えば、1000個のセルに対してループでsetBackground()を実行すると、1000回のサーバー通信が発生し、実行制限時間を超える原因となります

これを防ぐための鉄則は「一括読み込み、一括書き出し(Batch Operations)」です

JavaScript

// 【悪い例】ループ内で1つずつ書き込む(遅い)
for (var i = 1; i <= 100; i++) {
  sheet.getRange(i, 1).setValue(data[i]);
}

// 【良い例】配列を一度に流し込む(速い)
sheet.getRange(1, 1, 100, 1).setValues(dataArray);

この「バッチ処理」を意識するだけで、スクリプトの実行速度は数十倍から数百倍に向上します

カスタム関数のキャッシュ挙動

スプレッドシートは、カスタム関数の結果を一時的にキャッシュ(保存)します 。引数が変わらない限り、関数は再実行されません。もし強制的に再計算させたい場合は、引数にダミーのセル(更新頻度の高いセル)を含めるなどの工夫が必要です

また、高コストなAPI連携を行う場合は、GASのCacheServiceを併用することで、APIの呼び出し回数を節約し、コスト削減と速度向上を同時に達成できます

セキュリティと権限管理のベストプラクティス

GASを利用する上で、避けて通れないのが「権限」の問題です。特に2026年現在は、データの透明性とセキュリティがかつてないほど重視されています

承認フローと「未検証」の警告

自作したスクリプトを初めて実行すると、「承認が必要」というダイアログが表示されます 。さらに、公開されていないスクリプトの場合は「このアプリはGoogleによって確認されていません」という警告が出ます 。 これはエラーではなく、セキュリティ上の正常なプロセスです。「詳細」>「~(安全ではないページ)に移動」をクリックすることで、自分のスクリプトに権限を付与できます

OAuthスコープの最小化

スクリプトがアクセスできる範囲(スコープ)は、必要最小限に留めるのがベストです 。マニフェストファイルappsscript.jsonoauthScopesを明示的に記述することで、ユーザーが承認する際の安心感を高めることができます

また、2025年中盤より導入された「きめ細かな同意(Granular Consent)」により、ユーザーは特定のスコープだけを拒否することも可能になりました 。開発者は、一部の権限が拒否されてもエラーで落ちない「レジリエント(弾力性のある)なコード」を書くことが求められています。

まとめと今後の展望

本記事では、スプレッドシートの自動化の核となる「マクロ」と「カスタム関数」について、2026年の最新技術動向を交えて解説しました。

  • マクロは日常のルーチンを自動化する最も手軽な手段であり、macros.gsを編集することでその可能性は無限に広がります。
  • カスタム関数は自分専用の数式を定義し、JSDocを適切に書くことで組み込み関数と同等のユーザー体験を提供できます。
  • V8ランタイムとGemini AIの恩恵により、2026年の開発はより高速で、直感的で、かつ知的なものへと進化しました。

かつては「プログラマーだけの特権」だった自動化は、いまやAIの支援を受けた全てのビジネスパーソンに開かれたスキルとなっています。まずは半径を計算するような小さな関数から始め、徐々に自分だけの強力な自動化ツールセットを構築していってください。次回の連載では、外部APIとの連携や、トリガー機能を用いた完全無人自動化の世界に足を踏み入れます。

参考資料

  1. Google Apps Script Overview, https://developers.google.com/apps-script
  2. Google Apps Script - Google Workspace, https://workspace.google.com/products/apps-script/
  3. Migrate scripts to the V8 runtime, https://developers.google.com/apps-script/guides/v8-runtime/migration
  4. スプレッドシートのマクロとカスタム関数|Google Apps Script入門(2), https://yanai-ke.com/gas02/
  5. Top 8 Macros for Developers to Maximize Their Productivity, https://dev.to/radualexandrub/top-8-macros-for-developers-to-maximize-their-productivity-with-ahk-5bfj
  6. Google Sheets: Automate repetitive tasks with macros, https://support.google.com/docs/answer/9331168?hl=ja
  7. Google Apps Script Macros official documentation, https://developers.google.com/apps-script/guides/sheets/macros
  8. Google Sheets Service | Apps Script, https://developers.google.com/apps-script/reference/spreadsheet/
  9. Record a macro in Google Sheets (English Guide), https://support.google.com/docs/answer/9331168?hl=ja
  10. Implementing custom formulas and functions in Google Apps Script, https://basescripts.com/implementing-custom-formulas-and-functions-in-google-apps-script
  11. Manifest structure for macros reference, https://developers.google.com/apps-script/guides/sheets/macros#manifest-structure-for-macros
  12. Apps Script Manifests documentation, https://developers.google.com/apps-script/concepts/manifests
  13. V8 runtime overview for Apps Script, https://developers.google.com/apps-script/guides/v8-runtime
  14. Spreadsheet Macro Manifest Resources | Apps Script, https://developers.google.com/apps-script/manifest/sheets?hl=ja
  15. Custom Functions in Google Sheets official guide, https://developers.google.com/apps-script/guides/sheets/functions
  16. How to Create Custom Functions in Google Sheets, https://www.geeksforgeeks.org/google-sheets/how-to-create-custom-functions-in-google-sheets/
  17. Using a custom function in Sheets, https://developers.google.com/apps-script/guides/sheets/functions#using_a_custom_function
  18. Custom function naming and guidelines, https://developers.google.com/apps-script/guides/sheets/functions#guidelines
  19. Apps Script Quotas and Limitations (Current), https://developers.google.com/apps-script/guides/services/quotas
  20. 円の面積のカスタム関数の作成手順, https://yanai-ke.com/gas02/#toc8
  21. Google Apps Script Gemini and Vertex AI Integration, https://developers.google.com/apps-script
  22. Gemini in Chrome Side Panel is superior to Web App, https://www.reddit.com/r/GoogleGeminiAI/comments/1qgkor2/the_gemini_in_chrome_side_panel_is_vastly/
  23. Use AI functions in Google Sheets, https://support.google.com/docs/answer/15820999?hl=ja
  24. How to Use AI in Google Sheets: The Practical Guide for 2026, https://flowlyn.com/blog/how-to-use-ai-in-google-sheets
  25. 5 Simple Ways AI in Google Sheets Can Save You Time, https://www.stamats.com/insights/ai-in-google-sheets/
  26. Create & use named functions in Google Sheets, https://support.google.com/docs/answer/12504534?hl=ja
  27. Six productivity hacks for 2026 (IFTTT), https://ifttt.com/explore/six-productivity-hacks-for-2026
  28. Master Google Sheets Named Functions Fast Today, https://www.simular.ai/workflow/how-to-master-google-sheets-named-functions-fast-today
  29. New Functions In Google Sheets 2022 Guide, https://www.benlcollins.com/spreadsheets/new-functions-in-google-sheets-2022/
  30. Google Apps Script Best Practices for Performance, https://developers.google.com/apps-script/guides/support/best-practices
  31. Using Cache Service to Improve Performance, https://developers.google.com/apps-script/guides/sheets/functions#optimization
  32. Prevent custom functions from executing unnecessarily, https://stackoverflow.com/questions/48724839/prevent-custom-functions-from-executing-in-google-spreadsheets-google-apps-scrip
  33. Authorization Scopes and Permissions in GAS, https://developers.google.com/apps-script/concepts/scopes?hl=ja
  34. Google Apps Script Troubleshooting and Debugging, https://developers.google.com/apps-script/guides/support/troubleshooting?hl=ja
  35. Google Apps Script: A Beginner's Guide (Full Edition), https://www.benlcollins.com/apps-script/google-apps-script-beginner-guide/
  36. OAuth Client Verification and Granular Consent, https://developers.google.com/apps-script/guides/client-verification
  37. appsscript.json Manifest Structure for Macros | Developers, https://developers.google.com/apps-script/guides/sheets/macros?hl=ja#manifest-structure-for-macros

ーーーーーーーーーーーーーーーーーーーーー2021年9月4日執筆ーーーーーーーーーーーーーーーーー

はじめに

 Google Apps Script入門第二弾として、スプレッドシートのマクロとカスタム関数について紹介します。

 このGoogle Apps Script入門の第二弾からは、「GoogleのApps Scriptを学ぶ」の「AppsScriptFundamentals」に沿ってが学習していきます。

 この記事を読むと、次のことについて知ることができます。

  • スプレッドシートでマクロの作成
    • 練習用Googleスプレッドシートの読み込み
    • マクロの作成
  • スクリプトエディターでマクロを見る
    • マクロの適用
    • マクロ内容を変更して適用
  • カスタム関数
    • ファイルの追加から円の面積のカスタム関数の作成
    • 円の面積のカスタム関数の動作の確認
    • 円の面積に円周率に正確なGASの関数を利用
    • ドキュメンテーションコメント
    • カスタム機能のガイドライン

 GoogleのApps Scriptの基礎をを学んでいく前に、Gasとは?などについては知った上で学習するほうが良いでしょう。

 Gasとは?などについては次の記事を参照して下さい。

 それでは早速、スプレッドシートのマクロとカスタム関数などについて深堀していきます。

スプレッドシートでマクロの作成

練習用Googleスプレッドシートの読み込み

  これからのことを学習していく上で必要なGoogleが提供しいるスプレッドシートを読み込みましょう。

 Google Sheetsのドキュメントのコピー画面が出ますので、「コピーを作成」をクリックします。

 「コピー ~ Top 10 Highest Grossing Films (2018)」と言うGoogle Sheetsが立ち上がりますので、あなたの名前などを入れて、題目を変えておきましょう。

マクロの作成

 読み込んだGoogle Sheetsの上部メニューの「拡張機能」⇒「マクロ」⇒「マクロの記録」をクリックすると、下の方に「新しいマクロを記録していま…」というウインドウが表示されますので、そのデフォルトになっている「絶対参照を使用」⇒「相対参照を使用」に変更します。

 以後のあなたのGoogle Sheetsへの操作がマクロで自動記録されます。

 次の操作をします。

  1. 行1をクリックして選択
  2. 背景の色を白から青に変更
  3. テキストの色を黒から白に変更
  4. テキストを太字(Bold)にします。
  5. テキストのサイスを12ptにします。
  6. 1行を固定行に設定

  操作し終えたら、「新しいマクロを記録していま…」というウインドウ内の「保存」をクリックすると、「新しいマクロの保存」ウインドウが表示されますので、マクロ名に「headstyle」と記入して、「保存」をクリックします。

スクリプトエディターでマクロを見る

 作成したマクロをスクリプトエディターを起動して見てみましょう。

 上部メニューの「拡張機能」⇒「Apps Script」と順にクリックします。

 マクロのスクリプトを見ると次のようになっていました。

/** @OnlyCurrentDoc */
function headstyle() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
sheet.getRange(spreadsheet.getCurrentCell().getRow() - 13, 1, 1, sheet.getMaxColumns()).activate();
spreadsheet.getActiveRangeList().setBackground('#0000ff')
.setFontColor('#ffffff')
.setFontWeight('bold')
.setFontSize(12);
spreadsheet.getActiveSheet().setFrozenRows(1);
};

 上述のスクリプトで最初の行の内容は、「/** @OnlyCurrentDoc */」はコメント行となっており、「以下のスクリプトはこのスプレッドシートのみ適用されます」という意味になります。

 スクリプトの内容については、詳細は省略しますが、上から5行目の「.getRow() - 13, 1, 1」⇒「.getRow() , 1, 1」に変更して、保存(フロッピーマーク)をクリックして下さい。

マクロの適用

 それでは、作成したマクロを実際に適用してみましょう。

 sheet2に練習用の文字が書かれたシートがありますので、そのシートをクリックしてアクティブにし、A1セルを選択します。

 上部メニューの「拡張機能」⇒「マクロ」⇒「headstyle」を順にクリックすると、1行目にマクロで記録した内容が適用されます。

マクロ内容を変更して適用

 それでは、マクロ内の背景を薄いブルーに、文字色を濃いブルーに変更してみましょう。

 スクリプトの背景の部分と文字色の部分を次のように変更し、スクリプトを保存しましょう。

spreadsheet.getActiveRangeList().setBackground('#afeeee')
.setFontColor('#191970')

 元のシートに戻り、sheet2のA1を選択して、マクロの「hardstyle」を適用してみましょう。

カスタム関数

 カスタム関数とは、自分で作成した関数(自作関数)のことで、作成した関数はGoogle シート内で利用できます。

 Googleの学習では、米ドルをスイスフランへ変更するカスタム関数を作成していますが、ここでは、もっと簡単な円の面積を求めるカスタム関数の作成について紹介します。

ファイルの追加から円の面積のカスタム関数の作成

 App Script画面で右上の「ファイル +」⇒「スクリプト」をクリックして、無題を「circleArea」に「myFunction()」⇒「circleArea(r)」に変更し、中に円の面積を返す「return 3.14 * r  * r」式を加え、保存をクリックします。

円の面積のカスタム関数の動作の確認

 元のシートに戻り、sheet2の「A4」セルに10を入れ、その横の「B4」セルに先ほど作成した円の面積のカスタム関数「=circleArea(A4)」を記入すると、「Loading」と表示されたあと、円の面積の値「314」が表示されることが分かり、ちゃんと機能していることが分かります。

円の面積に円周率に正確なGASの関数を利用

 円の面積を求める際に、円の円周率に「3.14」を用いていましたが、GASの関数である「Math.PI」を用いて、同様に計算してみましょう。

 円の面積を求める部分を次のように書き換え、保存します。

const pai = Math.PI; //円周率のGAS関数を変数paiに代入
return pai * r * r ; //円の面積を返す。

 すると、円の面積の結果の部分は「314.1592654」とかわり、正確な円周率が用いられて円の面積が計算されていることが分かります。

ドキュメンテーションコメント

 カスタム関数を作成しましたが、シート上で関数をセルに書き込む際に全て間違えずに書き込む必要があります。

 しかし、「/**」ではじまり「*/」で終わるコメントを付け、円の面積である内容に書き換えることにより、セル内に式を記入する際に「ci」まで入力した段階で候補が表示され、候補の中から円の面積の「circleArea」を選べるようになります。

/**
* 円の面積を返す関数
* 
* @param {number} 円の半径
* @return {number} 円の面積
* @customfunction
*/
function CircleArea(r) { // 円の面積のカスタム関数
const pai = Math.PI; //円周率のGAS関数を変数paiに代入
return pai * r * r ; //円の面積を返す。
}

カスタム機能のガイドライン

  最後になりますが、Google のサイトによるとカスタム関数を作成する際には、次のことに注意する必要があります。

  1. ユーザー認証を必要とするカスタム関数を作成しないこと
  2. カスタム関数に別の組み込み関数と同じ名前を付けたり、名前の最後にアンダースコアを付けたりしないこと
  3. カスタム関数に変数引数(=RAND()のような変数)を渡さないこと
  4. 完了するまでに30秒以上かかる関数を作成しないこと

おわりに

 如何だったでしょうか?

 スプレッドシートでマクロの作成、練習用Googleスプレッドシートの読み込み、マクロの作成、スクリプトエディターでマクロを見る、マクロの適用、マクロ内容を変更して適用、カスタム関数、ファイルの追加から円の面積のカスタム関数の作成、円の面積のカスタム関数の動作の確認、円の面積に円周率に正確なGASの関数を利用、ドキュメンテーションコメント、カスタム機能のガイドラインなどについて解説してきました。

 この記事が少しでもあなたにとって役に立てればこれほど嬉しいことはありません。

以上です。

 

 

コメント

タイトルとURLをコピーしました