ADVERTISEMENT

【Googleスプレッドシート】Apps ScriptのonOpenトリガーでメニュー追加!起動時の処理

【Googleスプレッドシート】Apps ScriptのonOpenトリガーでメニュー追加!起動時の処理
🛡️ 超解決

スプレッドシートを開くたびに、自分好みのカスタムメニューを表示できたら便利だと思ったことはありませんか。Apps ScriptのonOpenトリガーを使えば、シートを開いた瞬間にスクリプトを実行し、独自のメニューを自動で追加できます。この記事では、onOpenトリガーでメニューを追加する具体的なコードと設定手順を解説します。初めての方でも、ステップごとに進めることで確実に実装できます。

【要点】onOpenトリガーでメニューを追加する3つのポイント

  • onOpen関数の定義: スクリプトエディタにfunction onOpen() { … } を記述します。この関数がシートを開くたびに自動実行されます。
  • Menuクラスのメソッド: SpreadsheetApp.getUi().createMenu() でメニューを作成し、addItem() で項目を追加、addToUi() で反映します。
  • 初回の承認: スクリプトを初めて実行する際に、権限の承認が必要です。シートを開いたときに自動で承認画面が表示されます。

ADVERTISEMENT

onOpenトリガーの仕組みとメニュー追加の利点

onOpenトリガーは、スプレッドシートを開く操作をきっかけにスクリプトを自動実行する仕組みです。このトリガーは特別な設定をしなくても、スクリプトエディタでonOpenという名前の関数を定義するだけで自動的に認識されます。メニューを追加する処理は、スプレッドシートのUIを操作するためのMenuクラスを利用します。具体的には、SpreadsheetApp.getUi()でUIインスタンスを取得し、createMenu()でメニューを作成、addItem()で項目を追加、最後にaddToUi()で反映します。この仕組みにより、シートを開くたびに一貫した操作環境を提供できます。また、メニュー項目に割り当てる関数は別途定義するため、実行したい処理を自由に組み込めます。ただし、onOpenトリガーには実行時間の制限(30秒)があるため、複雑な処理は避けるのが無難です。

onOpenトリガーでメニューを追加する手順

1. スクリプトエディタを開く

  1. スプレッドシートを開く
    メニューを追加したいスプレッドシートを開きます。
  2. 拡張機能メニューからスクリプトエディタを開く
    画面上部の「拡張機能」をクリックし、「Apps Script」を選択します。

2. onOpen関数を記述する

  1. コード.gsにコードを入力する
    デフォルトで開かれるコード.gsファイルに、以下のコードを貼り付けます。
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('カスタムメニュー');
  menu.addItem('挨拶を表示', 'showGreeting');
  menu.addSeparator();
  menu.addItem('日付を入力', 'insertDate');
  menu.addToUi();
}

function showGreeting() {
  SpreadsheetApp.getUi().alert('こんにちは!');
}

function insertDate() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var cell = sheet.getActiveCell();
  cell.setValue(new Date());
}

上記のコードでは、onOpen関数内で「カスタムメニュー」というメニューを作成し、2つの項目を追加しています。各項目は対応する関数を呼び出します。

3. スクリプトを保存して権限を承認する

  1. 保存ボタンをクリックする
    スクリプトエディタの上部にあるフロッピーディスクアイコンをクリックして保存します。
  2. プロジェクト名を設定する(任意)
    無題のプロジェクトとなっている場合は、任意の名前を付けて保存します。
  3. シートを再読み込みして承認画面を表示させる
    スプレッドシートのタブに戻り、ページを再読み込みします。すると、権限の承認を求めるダイアログが表示されます。「許可を確認」をクリックし、続けて自分のGoogleアカウントを選択し、「許可」をクリックします。

承認が完了すると、次回以降シートを開くたびに自動的にonOpen関数が実行され、メニューが追加されます。

4. メニューが表示されることを確認する

  1. シートを再読み込みする
    承認後、もう一度シートを開き直すと、画面上部のメニューバーに「カスタムメニュー」が追加されています。
  2. 各項目をクリックして動作を確認する
    「挨拶を表示」をクリックするとアラートが、「日付を入力」をクリックするとアクティブセルに現在の日付が入力されます。

onOpenトリガーの注意点とトラブルシューティング

メニューが追加されない場合

最も多い原因は、権限の承認が行われていないことです。シートを開いたときに承認画面が表示されない場合は、スクリプトエディタで onOpen 関数を手動で実行してみてください。その際、初回実行時に承認を求められます。また、スクリプトに構文エラーがあるとメニューが追加されません。スクリプトエディタの「実行」メニューから「デバッグ」を選択し、エラーがないか確認しましょう。

onOpen関数が制限時間を超えてしまう

onOpenトリガーは実行時間が30秒に制限されています。メニュー追加以外に重い処理(大量のセル操作や外部API呼び出しなど)を記述すると、タイムアウトで途中で止まります。メニュー追加だけにとどめ、複雑な処理はメニューから呼び出す関数に分離することをおすすめします。

複数のメニューを追加したい場合

onOpen関数内で createMenu を複数回呼び出すことで、複数の独立したメニューを追加できます。ただし、メニュー名は重複しないように注意してください。また、サブメニューを追加したい場合は、createMenu の代わりに addSubMenu メソッドを利用します。

ADVERTISEMENT

onOpenトリガーと他のトリガーの比較

トリガータイプ 実行タイミング 主な用途 制限
onOpen シートを開いたとき メニュー追加、初期設定 30秒の実行制限、編集不可
onEdit セルを編集したとき 自動データ処理、入力チェック 30秒の実行制限、単純編集のみ
onSelectionChange 選択範囲が変わったとき 選択セルの情報表示 頻繁に実行されるため注意
時間主導型トリガー 指定した時刻や間隔 定期的なデータ更新、メール送信 1日あたりの実行回数制限

まとめ

この記事では、Apps ScriptのonOpenトリガーを使ってスプレッドシート起動時にカスタムメニューを追加する方法を解説しました。onOpen関数の記述、メニュー作成のコード、初回承認の手順を理解することで、シートを開くたびに自動でメニューを表示できます。次は、メニュー項目にさらに高度な処理(データの整形や外部サービス連携など)を割り当ててみるとよいでしょう。また、onEditトリガーと組み合わせることで、より動的な操作環境を構築できます。ぜひ、自分だけの便利なメニューを作成してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。