スプレッドシートを開いたときに、自動でカスタムメニューが表示されると便利ですよね。onOpenトリガーを使えば、シートを開くたびに自分好みのメニューを追加できます。この記事では、Google Apps Scriptを使ってonOpen関数を記述し、メニューを作成・追加する手順を解説します。初心者の方でも簡単に設定できるよう、コード例とともに順を追って説明します。
【要点】onOpenトリガーでカスタムメニューを自動追加する方法
- onOpen関数の定義: スプレッドシートを開いたときに自動実行される特別な関数です。この関数内にメニュー追加コードを書きます。
- UIクラスのcreateMenuメソッド: メニューを作成し、addItemやaddSubMenuで項目を追加します。addItemで実行する関数を指定できます。
- トリガーの種類の理解: 単純トリガー(onOpen)は制限があるため、必要に応じてインストーラブルトリガーを使い分けます。
ADVERTISEMENT
目次
onOpenトリガーの仕組みとできること
onOpenトリガーは、スプレッドシートを開く操作をきっかけに自動でスクリプトを実行する機能です。Google Apps Scriptのシンプルトリガーの一種で、特別な設定なしに利用できます。このトリガーを使うと、開いた瞬間にメニューを追加したり、特定のセルを更新したり、初期設定を自動化できます。ただし、簡単な処理に限られ、権限が必要な操作(他のファイルへのアクセスなど)は実行できません。また、開いた直後にのみ動作し、編集操作では実行されない点も覚えておきましょう。
Apps ScriptでonOpen関数を記述してメニューを追加する手順
ここでは、実際にスクリプトを作成し、カスタムメニューを追加する手順を説明します。サンプルとして、「データの整理」メニューを作成し、その中に「削除」「並び替え」などの項目を追加します。
- スクリプトエディタを開く
スプレッドシートの上部メニューから「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。 - プロジェクト名を設定する
左上の「無題のプロジェクト」をクリックし、分かりやすい名前(例:「メニュー追加スクリプト」)に変更します。 - onOpen関数を記述する
エディタに以下のコードを貼り付けます。スペルミスに注意し、関数名は必ず「onOpen」にします。function onOpen() { var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu('データの整理'); menu.addItem('削除', 'deleteData'); menu.addItem('並び替え', 'sortData'); menu.addSeparator(); menu.addSubMenu(ui.createMenu('詳細').addItem('集計', 'aggregateData')); menu.addToUi(); } - 各メニュー項目の関数を定義する
同じスクリプトに、メニューから呼び出す関数を追加します。例として「deleteData」「sortData」「aggregateData」という関数を定義します。それぞれの関数には、実際の処理(例:選択範囲の削除、データの並び替えなど)を記述します。 - プロジェクトを保存する
ツールバーの保存アイコン(フロッピーディスク)をクリックするか、Ctrl+S(Macの場合はCmd+S)で保存します。 - onOpen関数をテストする
スプレッドシートのタブに戻り、ページを再読み込みします。すると、メニューバーに「データの整理」が追加されているはずです。各メニュー項目をクリックして、正常に動作するか確認します。
コードのポイント
createMenuの引数がメニュー名になります。addItemの第一引数が表示名、第二引数が実行する関数名です。addSeparatorで区切り線を入れられます。addSubMenuを使うとサブメニューを作成できます。最後にaddToUiでメニューを反映させます。この一連の流れをonOpen関数内に書くことが重要です。
onOpenトリガー設定時によくあるトラブルと対処法
メニューが表示されない
考えられる原因として、onOpen関数のスペルミスやコード内のエラーが挙げられます。スクリプトエディタで実行ボタン(▶)をクリックし、エラーが出ていないか確認します。また、保存後にスプレッドシートを再読み込みする必要があります。それでも表示されない場合は、ブラウザのキャッシュをクリアしてみてください。
メニュー項目をクリックしても何も起こらない
呼び出される関数が正しく定義されていない可能性があります。addItemの第二引数が、実際の関数名と一致しているか確認します。関数名は大文字小文字を区別します。また、関数内でエラーが発生していないか、ログを確認するとよいでしょう。
単純トリガーの制限に引っかかる
onOpenは単純トリガーであるため、実行時間が30秒を超えたり、他のサービスへのアクセス(例:外部API)が許可されていません。もし複雑な処理を伴う場合は、代わりにインストーラブルトリガーを使う必要があります。インストーラブルトリガーは、プロジェクトのトリガー一覧から手動で設定できます。その場合、関数名はonOpen以外の任意の名前にできます。
UIクラスのメニュー関連メソッドの比較
| メソッド名 | 機能 | 使用例 |
|---|---|---|
| createMenu | 新しいメニューを作成する | var menu = ui.createMenu(‘カスタムメニュー’) |
| addItem | メニューに項目を追加する | menu.addItem(‘名前’, ‘関数名’) |
| addSubMenu | サブメニューを追加する | menu.addSubMenu(subMenu) |
| addSeparator | 区切り線を追加する | menu.addSeparator() |
| addToUi | メニューをUIに反映させる | menu.addToUi() |
これらのメソッドを組み合わせることで、見やすく機能的なメニューを作成できます。メニューの階層構造が必要な場合は、サブメニューを活用すると整理しやすくなります。
まとめ
この記事では、onOpenトリガーを使ってスプレッドシートを開いたときに自動でカスタムメニューを追加する方法を解説しました。具体的には、Apps ScriptでonOpen関数を定義し、createMenuやaddItemなどのUIメソッドを使ってメニューを作成する手順を学びました。トラブルが発生した場合は、関数名のスペルやトリガーの種類を確認すると解決しやすくなります。次は、メニュー項目からデータ操作や別のスクリプトを呼び出す処理を追加して、より実践的な自動化に挑戦してみてください。例えば、メニューから選択範囲のデータをCSVでエクスポートする機能なども作れます。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】行を一括追加!複数行をまとめて挿入
- 【Googleスプレッドシート】行・列の入れ替え!ドラッグ&ドロップでの並べ替え
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】Apps Script V8ランタイムへの移行手順!古いコードの書き換え
- 【Googleスプレッドシート】セル内の画像サイズと位置を調整!アンカーと配置の指定
- 【Googleスプレッドシート】2段階プルダウンを実装!連動式リストの作り方
- 【Googleスプレッドシート】テキストを折り返し・はみ出し・切り捨てに切替!セル内の表示設定
- 【Googleスプレッドシート】テンプレートギャラリーを使い倒すコツ!業務別の活用例
