大量の予定をGASで一括カレンダー登録する方法

GASカレンダー一括登録
大量の予定をGASで一括カレンダー登録する方法のサムネイル

こんにちは、GASおじさんです。今回は「大量の予定をGoogle Apps Script(以下GAS)で一括カレンダー登録する方法」について解説します。中小企業の経営者やフリーランスの皆さん、手間のかかるカレンダー管理を効率化してコストも抑えたいですよね?

おじさんが教えるやり方は、既存のカレンダー予定を消さず、安全に大量登録する方法。しかもGoogleアカウントの利用枠内で使えるので、追加のSaaS料金不要。もちろんApps Scriptの実行上限はあるので、その点はご注意を。


初期設定と必要な権限

まずはGASでカレンダーにアクセスできるように権限を設定しましょう。今回のスクリプトはカレンダーの読み書き権限が必要です。

  1. Googleドライブに新規スプレッドシートを作成
  2. メニュー「拡張機能」→「Apps Script」を開く
  3. コードを貼り付けて保存
  4. 初回実行時に「カレンダーへのアクセス許可」を求められるので承認する

また、個人情報(予定のタイトルや日時など)を扱うため、取り扱いには十分注意してください。スクリプトはGoogleアカウントの利用枠内で動作し、追加の専用SaaS料金は発生しません。


バッチ登録でも既存データはそのまま残す設計

いきなりカレンダーの既存予定を消してしまうのは危険です。そこで今回は、予定データを新規日時付きのスプレッドシートにバックアップしつつ、新しい予定は新規作成のみを行います。

既存データの削除系APIは使わず、また既存シートを更新しません。これにより万一のトラブル時も復元が可能です。


コード例:CSV風データをスプレッドシートから読み込みカレンダーに一括登録

以下はスプレッドシートのA列に「タイトル」、B列に「開始日時」、C列に「終了日時」が入っていると仮定した例です。日時はISO形式(例:2026-10-20T09:00:00)で入力してください。

function batchImportEvents() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // 新規バックアップ用シートを日付付きで作成(例: Backup_20261016_1030)
  const backupSheetName = 'Backup_' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmm');
  const backupSheet = ss.insertSheet(backupSheetName);

  // 元データシート(予定を入力しているシート名を指定)
  const dataSheet = ss.getSheetByName('予定データ');
  if (!dataSheet) {
    throw new Error('「予定データ」シートが見つかりません。');
  }

  // データ範囲を取得(ヘッダー行除く)
  const lastRow = dataSheet.getLastRow();
  if (lastRow < 2) {
    Logger.log('登録する予定データがありません。');
    return;
  }
  const dataRange = dataSheet.getRange(2, 1, lastRow -1, 3);
  const data = dataRange.getValues();

  // バックアップに元データをコピー
  backupSheet.getRange(1, 1, 1, 3).setValues([['タイトル', '開始日時', '終了日時']]);
  backupSheet.getRange(2, 1, data.length, 3).setValues(data);

  // カレンダーID(自分のカレンダーIDに変更してください)
  const calendarId = CalendarApp.getDefaultCalendar().getId();
  const calendar = CalendarApp.getCalendarById(calendarId);

  // 入力検証とバッチ処理用にイベントオブジェクトを作成
  const eventsToCreate = [];

  data.forEach((row, index) => {
    const [title, startStr, endStr] = row;

    if (!title || !startStr || !endStr) {
      Logger.log(`行${index + 2}に空欄があります。スキップします。`);
      return;
    }

    const startDate = new Date(startStr);
    const endDate = new Date(endStr);

    // 開始日時・終了日時の妥当性チェック
    if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
      Logger.log(`行${index + 2}の日付形式が不正です。スキップします。`);
      return;
    }
    if (endDate <= startDate) {
      Logger.log(`行${index + 2}の終了日時が開始日時より前です。スキップします。`);
      return;
    }

    eventsToCreate.push({title, startDate, endDate});
  });

  // バッチ登録(1イベントずつ登録はAPI制限に注意)
  eventsToCreate.forEach(e => {
    calendar.createEvent(e.title, e.startDate, e.endDate);
  });

  Logger.log(`合計${eventsToCreate.length}件の予定をカレンダーに登録しました。`);
}

導入後のコスト削減イメージ

この方法を導入すれば、手作業での予定登録にかかる時間を大幅に削減できます。仮に1件の予定登録に1分かかっていたとすると、

  • 100件の予定登録 = 100分(約1.6時間)
  • おじさんの時給を仮に3,000円とすると、1.6時間×3,000円=4,800円のコスト削減

しかもこのスクリプトはGoogleアカウントの利用枠内で動くため、追加の専用SaaS料金は不要。Apps Scriptのquotaや実行時間上限はありますが、通常の業務で使う範囲なら十分対応可能です。


復元手順とトラブル対策

  • 予定データを誤って消してしまった場合も、バックアップシートに元データが残っています。ここから再度スクリプトを実行すれば復元可能です。
  • 万が一トリガー設定で問題が起きた場合は、Apps Scriptの管理画面からinstallable triggerを削除・再作成してください。
  • 個人情報が含まれるため、スプレッドシートの共有設定は慎重に行いましょう。

まとめ

  • 既存の予定は削除せず、新規登録のみを行う安全設計
  • バックアップシートで元データ管理&復元可能
  • 入力検証で不正データをスキップし安定動作
  • Googleアカウントの利用枠内で無料利用(専用SaaS料金なし)
  • 実行上限・quotaには注意を

手作業の面倒な予定登録はGASおじさんにお任せあれ。ぜひ今回のスクリプトを試してみてくださいね。


GASおじラボで500ツール使い放題 →