ADVERTISEMENT

【Googleスプレッドシート】Apps ScriptでカスタムMENU!管理画面の追加

【Googleスプレッドシート】Apps ScriptでカスタムMENU!管理画面の追加
🛡️ 超解決

Googleスプレッドシートでよく使う操作をメニューに追加できたら便利だと思いませんか。Apps Scriptを使えば、スプレッドシートの上部にオリジナルのメニューを追加し、自分で作成した関数をワンクリックで実行できるようになります。この記事では、Apps Scriptでカスタムメニューを作成し、管理画面のように活用する手順を詳しく解説します。具体的なコード例も示しますので、コピー&ペーストですぐに使えます。

【要点】Apps Scriptでカスタムメニューを追加する3つのポイント

  • onOpenトリガーでメニューを自動表示: スプレッドシートを開くたびにカスタムメニューが表示されるように設定します。
  • MenuクラスのaddItemメソッドで項目追加: メニューに表示する項目名と実行する関数を紐付けます。
  • サブメニューやセパレーターで整理: 複数の機能をグループ化して、使いやすいメニュー構造を作ります。

ADVERTISEMENT

カスタムメニュー追加の仕組みと必要な準備

カスタムメニューを追加するには、Apps ScriptのonOpenという特別な関数を使います。onOpenはスプレッドシートを開くたびに自動実行されるトリガーであり、この関数内でメニューを定義することで、開くたびにメニューが表示されます。まずはスクリプトエディタを開き、コードを記述する準備をしましょう。スクリプトエディタは、メニューの「拡張機能」→「Apps Script」から開けます。初めて使用する場合は、プロジェクトの作成が必要ですが、自動的に空のプロジェクトが作成されます。

カスタムメニューを追加する具体的な手順

1. 基本的なメニューと項目を追加する

  1. スクリプトエディタを開く
    スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  2. onOpen関数を記述する
    以下のコードをコピー&ペーストします。
    function onOpen() {
    var ui = SpreadsheetApp.getUi();
    var menu = ui.createMenu('カスタムメニュー');
    menu.addItem('データを更新', 'updateData');
    menu.addToUi();
    }
    function updateData() {
    SpreadsheetApp.getActiveSpreadsheet().toast('データを更新しました');
    }

    上記のコードで、「カスタムメニュー」というメニューが追加され、その中に「データを更新」という項目が表示されます。項目をクリックするとupdateData関数が実行されます。
  3. スクリプトを保存して実行する
    プロジェクトを保存し、スプレッドシートに戻って再読み込みします。メニューバーに「カスタムメニュー」が表示されていることを確認します。初回は承認が必要ですので、画面の指示に従って権限を許可してください。

2. サブメニューとセパレーターを追加する

  1. サブメニューを作成する
    サブメニューを追加するには、addSubMenuメソッドを使います。以下のように記述します。
    var subMenu = ui.createMenu('サブメニュー');
    subMenu.addItem('項目1', 'func1');
    subMenu.addItem('項目2', 'func2');
    menu.addSubMenu(subMenu);

    これをonOpen関数内で使うことで、メニューの中にさらに階層を持つメニューを追加できます。
  2. セパレーター(区切り線)を追加する
    項目と項目の間に区切り線を入れたい場合は、addSeparatorメソッドを使います。
    menu.addSeparator();
    これで視覚的にグループを分けられます。
  3. 完全なコード例
    以下はサブメニューとセパレーターを含む完全な例です。
    function onOpen() {
    var ui = SpreadsheetApp.getUi();
    var menu = ui.createMenu('管理画面');
    menu.addItem('データ更新', 'updateData');
    menu.addSeparator();
    var subMenu = ui.createMenu('レポート');
    subMenu.addItem('月次レポート作成', 'createMonthlyReport');
    subMenu.addItem('週次レポート作成', 'createWeeklyReport');
    menu.addSubMenu(subMenu);
    menu.addToUi();
    }

    このコードでは、「管理画面」メニューに「データ更新」と区切り線、さらに「レポート」サブメニューが追加されます。

3. メニュー項目の追加テクニック

  1. チェックボックス項目を追加する
    addCheckboxItemメソッドを使うと、チェックボックス付きの項目を追加できます。ただし、この機能は限定的で、通常のメニュー項目として表示されない場合があります。代わりに、カスタムダイアログやサイドバーを使う方法もありますが、ここではメニューに焦点を当てます。
  2. メニュー項目の動的な表示・非表示
    状況に応じてメニュー項目を表示/非表示にすることは、onOpen関数内で条件分岐を使うことで可能です。例えば、特定のシートがアクティブな場合のみ項目を追加するなどの制御ができます。

カスタムメニュー追加時の注意点とよくあるトラブル

メニューが表示されない

最も多い原因は、onOpen関数が正しく定義されていないか、トリガーが設定されていないことです。スクリプトエディタでonOpen関数が正しく記述されているか確認してください。また、初回実行時は承認が必要です。スプレッドシートを再読み込みしても表示されない場合は、一度スクリプトエディタでonOpen関数を手動実行して承認を完了させると解決します。

項目をクリックしても関数が実行されない

関数名が間違っている可能性があります。addItemの第2引数で指定する関数名は、スクリプト内で定義した関数名と完全に一致している必要があります。大文字小文字も区別されるので注意してください。また、関数に引数を渡すことはできません。メニューから呼び出す関数は引数なしである必要があります。引数が必要な場合は、別の方法で値を取得するように設計する必要があります。

権限エラーが発生する

スクリプトがスプレッドシートや他のサービスにアクセスする場合、適切なスコープの承認が必要です。初回実行時に表示される承認画面で許可してください。また、スクリプトの内容によっては追加のスコープが必要になることがあります。その場合は、スクリプトエディタの「リソース」→「Google Cloud Platform Project」からスコープを確認・追加できます。

メニューの更新が反映されない

onOpen関数はスプレッドシートを開いたときに一度だけ実行されます。メニューの内容を変更した場合、変更を反映させるにはスプレッドシートを閉じて再度開く必要があります。また、スクリプトエディタで保存した後、スプレッドシートを再読み込み(F5)することで更新されます。

ADVERTISEMENT

メニュー項目の種類と用途の比較

項目の種類 追加メソッド 用途
通常の項目 addItem(名前, 関数) 単一の処理を実行する
サブメニュー createMenu → addSubMenu 関連する項目をグループ化する
セパレーター addSeparator() 視覚的な区切りを入れる
チェックボックス項目 addCheckboxItem(名前, 関数, checked) オン/オフ状態を保持する(限定的)

この記事では、Apps Scriptを使ってGoogleスプレッドシートにカスタムメニューを追加する方法を解説しました。onOpen関数にメニューを定義することで、スプレッドシートを開くたびに自動的に表示されるメニューを作成できます。サブメニューやセパレーターを活用すれば、複数の機能を整理して管理画面のように使いやすくなります。次は、メニューから呼び出す関数に、実際にデータの集計やシートの操作などの処理を実装してみてください。また、onEditトリガーと組み合わせることで、さらに高度な自動化も可能です。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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