📚 Google Apps Script (GAS) でスプレッドシートのカスタムメニューを作成する方法

Google スプレッドシートをより便利に使うために、Google Apps Script (GAS)方法を、定型業務の独自のカスタムメニューを作成する方法を解説します。GASが使えれば、定型業務の自動化や便利な機能をメニューからワンクリックで実行できるようになります。


🎛️ 1.カスタムメニューの基本構造

関数は、スプレッドシートを表示した際に自動的に実行され、ユーザーインターフェイス(UI )にメニューが追加されます。​​​​​GAS でカスタムメニューを作成するには、onOpen()関数を利用します。onOpen()関数は、スプレッドシートを表示した際に自動的に実行され、ユーザーインターフェース(UI)にメニューを追加します。

基本コード

ジャバスクリプトコピーする編集するfunction onOpen() {
  // スプレッドシートのUIを取得
  var ui = SpreadsheetApp.getUi();

  // メニューを作成
  ui.createMenu('カスタムメニュー') // メニュー名
    .addItem('データ集計', 'aggregateData') // 項目名と実行関数
    .addItem('レポート作成', 'createReport')
    .addSeparator() // 区切り線の追加
    .addItem('設定更新', 'updateSettings')
    .addToUi(); // UI にメニューを追加
}

// データ集計関数
function aggregateData() {
  SpreadsheetApp.getUi().alert('データ集計を開始します');
}

// レポート作成関数
function createReport() {
  SpreadsheetApp.getUi().alert('レポートを作成しました');
}

// 設定更新関数
function updateSettings() {
  SpreadsheetApp.getUi().alert('設定を更新しました');
}

📌ポイント

  • onOpen()関数は自動実行される
  • .addItem('メニュー名', '関数名')でメニューの項目を追加
  • .addSeparator()で区切り線を追加
  • .addToUi()スプレッドシートにメニューを反映

📄 2.カスタムメニューを反映する方法

🛠️手順

  1. Googleスプレッドシートを開く
  2. 拡張機能 → Apps Scriptを押す
  3. コードエディタに上記のコードを貼り付けます
  4. 「デプロイ」→「テスト」→「onOpen」を実行
  5. シートを再読み込みして、メニューが追加されている事を確認

📚 3. サブメニューを追加する方法

。サブメニュー(ドロップダウン)を追加してaddSubMenu()使用します。

サブメニューのコード

ジャバスクリプトコピーする編集するfunction onOpen() {
  var ui = SpreadsheetApp.getUi();

  // サブメニューの作成
  var subMenu = ui.createMenu('レポート関連')
    .addItem('月次レポート', 'createMonthlyReport')
    .addItem('年次レポート', 'createAnnualReport');

  // メインメニュー
  ui.createMenu('カスタムメニュー')
    .addItem('データ集計', 'aggregateData')
    .addSubMenu(subMenu) // サブメニューを追加
    .addItem('設定更新', 'updateSettings')
    .addToUi();
}

// サブメニューの関数
function createMonthlyReport() {
  SpreadsheetApp.getUi().alert('月次レポートを作成しました');
}

function createAnnualReport() {
  SpreadsheetApp.getUi().alert('年次レポートを作成しました');
}

📌ポイント

  • createMenu()でサブメニューを作成
  • .addSubMenu(subMenu)メインメニューにサブメニューを追加

⚡️ 4.ショートカットキーを表示する方法

できんが、`GAS のメニューでは直接ショートカットキーを優先することはできませんが、addItem()説明として表示することが可能です。

ジャバスクリプトコピーする編集するui.createMenu('カスタムメニュー')
  .addItem('データ集計 (Ctrl + Shift + A)', 'aggregateData')
  .addToUi();

🕹️ 5. 条件付きメニューの作成

特定のユーザーや条件によってメニュー内容を変更することもできます。例えば、管理者のみ特別なメニューを表示させるには以下のようにします。

ジャバスクリプトコピーする編集するfunction onOpen() {
  var ui = SpreadsheetApp.getUi();
  var userEmail = Session.getActiveUser().getEmail();

  var menu = ui.createMenu('管理メニュー');
  if (userEmail === 'admin@example.com') {
    menu.addItem('管理者用レポート', 'adminReport');
  } else {
    menu.addItem('ユーザー用レポート', 'userReport');
  }
  menu.addToUi();
}

// 管理者用レポート
function adminReport() {
  SpreadsheetApp.getUi().alert('管理者レポートを作成しました');
}

// ユーザー用レポート
function userReport() {
  SpreadsheetApp.getUi().alert('ユーザー用レポートを作成しました');
}

📌ポイント

  • Session.getActiveUser().getEmail()でログインユーザーのメールアドレスを取得
  • 条件分岐でユーザーごとにメニューを出し分ける

🔍 6. トラブルシューティング

❗️メニューが表示されない場合

  • onOpen()手動で実行してからシートを再読み込み
  • 許可のリクエストが必要な場合は、許可を与える
  • ViewExecution logでエラーを確認

🎯 7. 応用例:業務自動化メニューの活用

GAS メニューは業務効率化にも活用できます。例えば、以下のような操作をワンクリックで実行できます。

  • 売上の集計
  • 顧客レポートの自動作成
  • Googleドライブへのバックアップ
ジャバスクリプトコピーする編集するfunction backupData() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();

  var folder = DriveApp.getFolderById('FOLDER_ID'); // フォルダIDを指定
  var fileName = 'バックアップ_' + Utilities.formatDate(new Date(), 'JST', 'yyyyMMdd');
  var newFile = folder.createFile(fileName + '.csv', convertToCSV(values));
  SpreadsheetApp.getUi().alert('バックアップを作成しました: ' + newFile.getName());
}

// データをCSV形式に変換
function convertToCSV(data) {
  return data.map(function(row) {
    return row.join(',');
  }).join('\n');
}

🎉 8. まとめ

Google Apps Script (GAS) でのカスタムメニュー作成は、日常業務の効率化やスプレッドシートの機能拡張に非常に便利です。

基本的な手順

  1. onOpen()でメニューを自動作成
  2. で項目を追加.addItem()やで.addSubMenu()項目を追加
  3. .addToUi()でUIに反映
  4. 必要に応じて、サブメニュー・条件分岐・自動化機能を追加

これであなたのスプレッドシートは、業務効率を大幅にアップさせる強力なツールになります!




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です