大量イベントをGASで一括登録する方法

GASカレンダー業務効率化
大量イベントをGASで一括登録する方法のサムネイル

大量イベントをGASで一括登録する方法

中小企業の経営者やフリーランスの皆さん、こんにちは。GASおじさんです。今回はGoogleカレンダーに大量のイベントをまとめて登録しつつ、既存のデータは直接触らず安全に運用できる方法を紹介するよ。GAS(Google Apps Script)を使えば、SaaS課金を増やさず「Googleアカウントの利用枠内で追加の専用SaaS料金なし。Apps Scriptのquota・実行上限あり」という環境で効率化が可能だ。

大量登録って聞くと「既存の予定をどうするの?」「失敗したらどうしよう?」って心配になるけど、おじさんのやり方は以下のポイントを重視してる。

  • 既存カレンダーの予定は消さずに残す(削除APIは使わない)
  • 入力データの検証をしっかり行う
  • 一括書き込みはバッチ処理で負荷を抑える
  • バックアップ(ロールバック)用に新しい日時付きのスプレッドシートやファイルに結果を出力する

では早速、具体的なコードと運用のコツを解説していこう。


初期設定と必要権限

まず、GoogleカレンダーAPIを使うのでGASのプロジェクトで「GoogleカレンダーAPI」を有効にしておこう。
さらにカレンダーへのアクセス権限は、スクリプト実行時に以下のスコープが必要になる。

  • https://www.googleapis.com/auth/calendar
  • https://www.googleapis.com/auth/spreadsheets

これらは初回実行時に承認を求められるよ。
個人情報の取り扱いは、扱うイベント情報に顧客情報が含まれる場合は適切に管理しよう。
また、installable trigger(時間主導型トリガー)を設定すれば、定期的にイベント一括登録処理を実行することも可能だ。


入力データの準備と検証

イベントデータは以下のようなスプレッドシートで管理するのが手軽。
例)

イベント名 開始日時 終了日時 説明 場所
セミナーA 2026-09-01 10:00:00 2026-09-01 12:00:00 新商品説明会 東京本社
打ち合わせB 2026-09-02 14:00:00 2026-09-02 15:00:00 顧客打ち合わせ オンライン

ポイントは日付のフォーマットチェックや、開始日時が終了日時より未来かどうかの検証。
不正なデータが混ざるとAPIエラーや無駄なクォータ消費になるからね。


一括登録のコード例

このコードは、入力元スプレッドシートのイベント情報を読み込み、Googleカレンダーに順次登録。
既存のカレンダー予定は削除しない。
さらに登録したイベントのIDや詳細は、新しい日時付きのスプレッドシートにバックアップとして書き出す仕様だ。

function bulkCreateEvents() {
  const calendarId = 'primary'; // 使いたいカレンダーIDに変更可
  const inputSheetName = 'イベント入力'; // 入力元シート名
  const backupSpreadsheetName = `イベント登録バックアップ_${new Date().toISOString()}`;

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const inputSheet = ss.getSheetByName(inputSheetName);
  if (!inputSheet) {
    throw new Error(`シート「${inputSheetName}」が見つかりません`);
  }

  const data = inputSheet.getDataRange().getValues();
  // 先頭行はヘッダーとしてスキップ
  const eventsData = data.slice(1);

  // バックアップ用スプレッドシートを新規作成
  const backupSs = SpreadsheetApp.create(backupSpreadsheetName);
  const backupSheet = backupSs.getActiveSheet();
  backupSheet.appendRow(['タイトル', '開始日時', '終了日時', '説明', '場所', 'イベントID', '登録結果']);

  const calendar = CalendarApp.getCalendarById(calendarId);

  // 1件ずつ追加。バッチでAPI制限に配慮しつつ処理
  eventsData.forEach(row => {
    const [title, startStr, endStr, description, location] = row;

    // 入力検証
    if (!title || !startStr || !endStr) {
      backupSheet.appendRow([title, startStr, endStr, description, location, '', '入力不備でスキップ']);
      return;
    }

    const start = new Date(startStr);
    const end = new Date(endStr);
    if (isNaN(start.getTime()) || isNaN(end.getTime()) || start >= end) {
      backupSheet.appendRow([title, startStr, endStr, description, location, '', '日時不正でスキップ']);
      return;
    }

    try {
      // イベント作成
      const event = calendar.createEvent(title, start, end, {
        description: description || '',
        location: location || ''
      });

      backupSheet.appendRow([title, startStr, endStr, description, location, event.getId(), '登録成功']);
    } catch (e) {
      backupSheet.appendRow([title, startStr, endStr, description, location, '', `エラー: ${e.message}`]);
    }
  });

  Logger.log(`バックアップシートURL: ${backupSs.getUrl()}`);
}

バックアップと復元の考え方

この方法では既存のカレンダー予定はまったく触らないので、誤って消してしまうリスクはゼロ
しかし、万が一大量登録でミスがあった場合は、バックアップ先のスプレッドシートを確認してどのイベントが追加されたかを把握し、必要に応じて個別にGoogleカレンダー上で手動削除する方法が現実的だ。

また、復元作業は以下の流れになる。

  1. バックアップスプレッドシートの該当イベントIDを元に、Googleカレンダー上でイベントを特定。
  2. 不要なイベントはカレンダーUIやGoogleカレンダーAPIの管理画面から手動削除。
  3. 修正済みの入力データを再度このスクリプトで登録。

導入によるコスト削減イメージ

例えば、手作業で一件あたり5分かかっていたイベント登録を一括処理により1分に短縮できたとしよう。
1ヶ月に100件のイベント登録がある場合、

  • 手作業時:5分 × 100 = 500分(約8時間20分)
  • GAS自動化後:1分 × 100 = 100分(約1時間40分)

差分は400分(約6時間40分)も削減できる計算だ。
仮に時給3000円の人件費換算すると、

6.67時間 × 3000円 = 20,000円弱のコスト削減効果が期待できる。

もちろんApps Scriptの実行にはquotaや実行時間上限があるが、中小企業やフリーランス規模なら十分対応可能だ。


まとめ

  • Google Apps Scriptで大量イベントを安全に一括登録できる
  • 既存データは直接消さず、新規作成のバックアップ先に登録結果を保存
  • 入力検証やエラーハンドリングで安定運用可能
  • Googleアカウントの利用枠内で追加の専用SaaS料金なし(quota・実行上限あり)
  • installable triggerで定期実行も可能

この方法でイベント登録作業を効率化し、余計なSaaS課金を防ぎつつ業務効率アップを目指そう。


さらにたくさんのGAS活用ノウハウを知りたい方は、ぜひこちらからメンバーシップに参加してね!
GASおじラボで500ツール使い放題 →