Googleカレンダーの予定を一括で移行する方法

Googleカレンダーの予定を一括で移行する方法

既存のカレンダーの予定を新しいカレンダーに移行する方法を説明します。
Clock Icon2024.11.25

SBJソリューション部のserinaです。

全ての予定やタスクをGoogleカレンダーで管理しています。
最近、毎日オンライン英会話を受けている上にパーソナルジムの予定も追加したらカレンダーがかなり見辛くなってしまいました、、、。
なので、新しいカレンダーを作成して整理することにしました。

やりたいこと

1つのカレンダーで管理するのではなく、カテゴリごとにカレンダーを作成して予定を分けたい。
その際に既存の予定を新規のカレンダーに移行したい。

移行するメリット

  • カテゴリ別に見たいスケジュールのみ確認できる
  • 一部の予定を誰かと共有しやすい

移行するデメリット

  • カレンダーの作成時に毎回どのカレンダーにするのか選択する必要がある

現在のGoogleカレンダー

My calendarsはこんな感じです。
ここに新規のカレンダーを追加して移行していきます!

- My calendars
  - Main ... メインの予定管理
  - Sub ... 定期的な予定管理(クレカ引き落とし日など)
  - Task ... タスク管理

やり方

GASを作成して、移行します。
移行先のカレンダーがまだない場合は先に作成してください。

スクリプトはこちらです。

function moveFilteredEventsBetweenCalendars() {
  // カレンダーID
  const sourceCalendarId = '[email protected]'; // コピー元
  const destinationCalendarId = '3fb648aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@group.calendar.google.com'; // コピー先

  // コピー元とコピー先のカレンダーを取得
  const sourceCalendar = CalendarApp.getCalendarById(sourceCalendarId);
  const destinationCalendar = CalendarApp.getCalendarById(destinationCalendarId);

  // 移動対象の期間 (例: 過去 1 年間の予定)
  const now = new Date();
  const pastDate = new Date();
  pastDate.setDate(now.getDate() - 365);

  // コピー元カレンダーのイベントを取得
  const events = sourceCalendar.getEvents(pastDate, now);

  // タイトルに "カランメソッド" または "レアジョブ" が含まれるイベントのみをコピー
  events.forEach(event => {
    const title = event.getTitle();
    if (title.includes("カランメソッド") || title.includes("レアジョブ")) {
      // コピー先カレンダーにイベントを作成
      destinationCalendar.createEvent(
        title,
        event.getStartTime(),
        event.getEndTime(),
        {location: event.getLocation(), description: event.getDescription()}
      );

      // 元のイベントを削除 ※削除したくない場合はコメントアウトか削除
      event.deleteEvent();
    }
  });
}

変更が必要な値

カレンダーID

const sourceCalendarId = '[email protected]'; // コピー元
  const destinationCalendarId = '3fb648aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@group.calendar.google.com'; // コピー先

移行したい予定があるカレンダーのIDと、移行先のカレンダーIDを記載します。
カレンダーIDはカレンダーの設定画面に記載されています。

対象期間

// 移動対象の期間 (例: 過去 1 年間の予定)
  const now = new Date();
  const pastDate = new Date();
  pastDate.setDate(now.getDate() - 365);

ここでは過去1年間としてます。
もっと先にしたい場合や短くしたい場合は365の値を適宜変更してください。

予定の検索条件

if (title.includes("カランメソッド") || title.includes("レアジョブ")) {

私の場合は、オンライン英会話の予定のみ移行したかったため、カランメソッドレアジョブがタイトルに含むかどうかという条件を追加しています。

ここは適宜変更してください。

移行後のGoogleカレンダー

My calendarsはこんな感じです。
今回でGym, Online Lessonを追加しています。

- My calendars
  - Main ... メインの予定管理
  - Gym ... パーソナルジムの予定管理
  - Online Lesson ... オンライン英会話の予定管理
  - Sub ... 定期的な予定管理(クレカ引き落とし日など)
  - Task ... タスク管理

最終的に私のカレンダーは、こうなっています!

my-google-calendar

1ヶ月表示で全部のカレンダー表示してしまうとカオスなんですが、、、。
1日か4日表示で確認することが多いため1ヶ月表示のごちゃごちゃさは個人的には気にならないです。

1ヶ月表示で確認する場合は、オンライン英会話やジムなど特定のカレンダーのみで表示して、1ヶ月の予定を俯瞰して確認することが多いです。

最後に

かなり見やすくすることができました!!
GASは簡単に使えるので手軽で良いなと感じました。

しばらくはこの運用方法でGoogleカレンダーを活用していきます。
また、不便に感じたらブログを書きたいと思います。

気に入っている予定管理方法なので、誰かの参考になったら嬉しいです!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.