スプレッドシートを開くたびに、自分好みのカスタムメニューを表示できたら便利だと思ったことはありませんか。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. スクリプトエディタを開く
- スプレッドシートを開く
メニューを追加したいスプレッドシートを開きます。 - 拡張機能メニューからスクリプトエディタを開く
画面上部の「拡張機能」をクリックし、「Apps Script」を選択します。
2. onOpen関数を記述する
- コード.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. スクリプトを保存して権限を承認する
- 保存ボタンをクリックする
スクリプトエディタの上部にあるフロッピーディスクアイコンをクリックして保存します。 - プロジェクト名を設定する(任意)
無題のプロジェクトとなっている場合は、任意の名前を付けて保存します。 - シートを再読み込みして承認画面を表示させる
スプレッドシートのタブに戻り、ページを再読み込みします。すると、権限の承認を求めるダイアログが表示されます。「許可を確認」をクリックし、続けて自分のGoogleアカウントを選択し、「許可」をクリックします。
承認が完了すると、次回以降シートを開くたびに自動的にonOpen関数が実行され、メニューが追加されます。
4. メニューが表示されることを確認する
- シートを再読み込みする
承認後、もう一度シートを開き直すと、画面上部のメニューバーに「カスタムメニュー」が追加されています。 - 各項目をクリックして動作を確認する
「挨拶を表示」をクリックするとアラートが、「日付を入力」をクリックするとアクティブセルに現在の日付が入力されます。
onOpenトリガーの注意点とトラブルシューティング
メニューが追加されない場合
最も多い原因は、権限の承認が行われていないことです。シートを開いたときに承認画面が表示されない場合は、スクリプトエディタで onOpen 関数を手動で実行してみてください。その際、初回実行時に承認を求められます。また、スクリプトに構文エラーがあるとメニューが追加されません。スクリプトエディタの「実行」メニューから「デバッグ」を選択し、エラーがないか確認しましょう。
onOpen関数が制限時間を超えてしまう
onOpenトリガーは実行時間が30秒に制限されています。メニュー追加以外に重い処理(大量のセル操作や外部API呼び出しなど)を記述すると、タイムアウトで途中で止まります。メニュー追加だけにとどめ、複雑な処理はメニューから呼び出す関数に分離することをおすすめします。
複数のメニューを追加したい場合
onOpen関数内で createMenu を複数回呼び出すことで、複数の独立したメニューを追加できます。ただし、メニュー名は重複しないように注意してください。また、サブメニューを追加したい場合は、createMenu の代わりに addSubMenu メソッドを利用します。
ADVERTISEMENT
onOpenトリガーと他のトリガーの比較
| トリガータイプ | 実行タイミング | 主な用途 | 制限 |
|---|---|---|---|
| onOpen | シートを開いたとき | メニュー追加、初期設定 | 30秒の実行制限、編集不可 |
| onEdit | セルを編集したとき | 自動データ処理、入力チェック | 30秒の実行制限、単純編集のみ |
| onSelectionChange | 選択範囲が変わったとき | 選択セルの情報表示 | 頻繁に実行されるため注意 |
| 時間主導型トリガー | 指定した時刻や間隔 | 定期的なデータ更新、メール送信 | 1日あたりの実行回数制限 |
まとめ
この記事では、Apps ScriptのonOpenトリガーを使ってスプレッドシート起動時にカスタムメニューを追加する方法を解説しました。onOpen関数の記述、メニュー作成のコード、初回承認の手順を理解することで、シートを開くたびに自動でメニューを表示できます。次は、メニュー項目にさらに高度な処理(データの整形や外部サービス連携など)を割り当ててみるとよいでしょう。また、onEditトリガーと組み合わせることで、より動的な操作環境を構築できます。ぜひ、自分だけの便利なメニューを作成してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
