ADVERTISEMENT

【Googleスプレッドシート】onOpen トリガーの活用!開いた時にメニュー追加

【Googleスプレッドシート】onOpen トリガーの活用!開いた時にメニュー追加
🛡️ 超解決

スプレッドシートを開いたときに、自動でカスタムメニューが表示されると便利ですよね。onOpenトリガーを使えば、シートを開くたびに自分好みのメニューを追加できます。この記事では、Google Apps Scriptを使ってonOpen関数を記述し、メニューを作成・追加する手順を解説します。初心者の方でも簡単に設定できるよう、コード例とともに順を追って説明します。

【要点】onOpenトリガーでカスタムメニューを自動追加する方法

  • onOpen関数の定義: スプレッドシートを開いたときに自動実行される特別な関数です。この関数内にメニュー追加コードを書きます。
  • UIクラスのcreateMenuメソッド: メニューを作成し、addItemやaddSubMenuで項目を追加します。addItemで実行する関数を指定できます。
  • トリガーの種類の理解: 単純トリガー(onOpen)は制限があるため、必要に応じてインストーラブルトリガーを使い分けます。

ADVERTISEMENT

onOpenトリガーの仕組みとできること

onOpenトリガーは、スプレッドシートを開く操作をきっかけに自動でスクリプトを実行する機能です。Google Apps Scriptのシンプルトリガーの一種で、特別な設定なしに利用できます。このトリガーを使うと、開いた瞬間にメニューを追加したり、特定のセルを更新したり、初期設定を自動化できます。ただし、簡単な処理に限られ、権限が必要な操作(他のファイルへのアクセスなど)は実行できません。また、開いた直後にのみ動作し、編集操作では実行されない点も覚えておきましょう。

Apps ScriptでonOpen関数を記述してメニューを追加する手順

ここでは、実際にスクリプトを作成し、カスタムメニューを追加する手順を説明します。サンプルとして、「データの整理」メニューを作成し、その中に「削除」「並び替え」などの項目を追加します。

  1. スクリプトエディタを開く
    スプレッドシートの上部メニューから「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  2. プロジェクト名を設定する
    左上の「無題のプロジェクト」をクリックし、分かりやすい名前(例:「メニュー追加スクリプト」)に変更します。
  3. 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();
    }
  4. 各メニュー項目の関数を定義する
    同じスクリプトに、メニューから呼び出す関数を追加します。例として「deleteData」「sortData」「aggregateData」という関数を定義します。それぞれの関数には、実際の処理(例:選択範囲の削除、データの並び替えなど)を記述します。
  5. プロジェクトを保存する
    ツールバーの保存アイコン(フロッピーディスク)をクリックするか、Ctrl+S(Macの場合はCmd+S)で保存します。
  6. onOpen関数をテストする
    スプレッドシートのタブに戻り、ページを再読み込みします。すると、メニューバーに「データの整理」が追加されているはずです。各メニュー項目をクリックして、正常に動作するか確認します。

コードのポイント

createMenuの引数がメニュー名になります。addItemの第一引数が表示名、第二引数が実行する関数名です。addSeparatorで区切り線を入れられます。addSubMenuを使うとサブメニューを作成できます。最後にaddToUiでメニューを反映させます。この一連の流れをonOpen関数内に書くことが重要です。

onOpenトリガー設定時によくあるトラブルと対処法

メニューが表示されない

考えられる原因として、onOpen関数のスペルミスやコード内のエラーが挙げられます。スクリプトエディタで実行ボタン(▶)をクリックし、エラーが出ていないか確認します。また、保存後にスプレッドシートを再読み込みする必要があります。それでも表示されない場合は、ブラウザのキャッシュをクリアしてみてください。

メニュー項目をクリックしても何も起こらない

呼び出される関数が正しく定義されていない可能性があります。addItemの第二引数が、実際の関数名と一致しているか確認します。関数名は大文字小文字を区別します。また、関数内でエラーが発生していないか、ログを確認するとよいでしょう。

単純トリガーの制限に引っかかる

onOpenは単純トリガーであるため、実行時間が30秒を超えたり、他のサービスへのアクセス(例:外部API)が許可されていません。もし複雑な処理を伴う場合は、代わりにインストーラブルトリガーを使う必要があります。インストーラブルトリガーは、プロジェクトのトリガー一覧から手動で設定できます。その場合、関数名はonOpen以外の任意の名前にできます。

ADVERTISEMENT

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

この記事の監修者
✍️

超解決 第一編集部

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