【GASをコピペ】Googleカレンダーの予定を一気にスプレッドシートに書き出す方法

こんにちは! 効率化オタクのヨス(プロフィールはこちら)です。

たとえば「Googleカレンダーに入れた過去1年間の行動を振り返りたい」と思ったとき、どうすればいいのでしょうか。

1か月ずつさかのぼって確認するのは、気が遠くなりそうですよね?

この問題は、GAS(Google Apps Script)を使えば解決します。

たとえば、GASで過去1年分のカレンダーの予定をスプレッドシートに一瞬で書き出せますよ!

スプレッドシートになってしまえば、Gemini NotebookのソースにしてAIに指示することも可能です。

本記事では、コピペするだけで簡単にできる、Googleカレンダーの内容をスプレッドシートに書き出す方法を紹介します。

なぜ過去のカレンダーを書き出すのか?

そもそも「どうしてGoogleカレンダーの予定をスプレッドシートに書き出すの?」と思う人もいるかもしれません。

実はこれ、次の例のようなメリットがあります。

  • 確定申告や経理作業の効率化(打ち合わせ相手がすぐわかる)
  • 1年間の振り返り(何に時間を使っていたかを客観的に見直せる)
  • AI(Gemini Notebookなど)にレビューしてもらえる

このなかでも、書き出したデータをAIに読み込ませるのがもっともおすすめです!

たとえば、Gemini Notebookにある機能「インフォグラフィック」でまとめさせたのがこちら。

プロンプトで、「6つの項目に分けてレーダーチャートで評価して」のように指示しています(「中世ヨーロッパ風RPG」など装飾の指示はいろいろしていますが)。

Googleカレンダーからスプレッドシートに書き出されるデータ

今回の方法でGoogleカレンダーからGoogleスプレッドシートに書き出されるのは以下の5つの項目です。

  1. 開始日時
  2. 終了日時
  3. タイトル(=予定の名前:「Aさんとミーティング」など)
  4. 場所
  5. 詳細・説明

実際の画面はこちらになります。

このように必要な情報だけが整理されて、Googleスプレッドシートに出力されます。

これなら、あとから検索したり並べ替えたりするのもラクっス!

設定のやり方

それでは設定を進めていきましょう。

大きく分けると、Googleスプレッドシートを用意し、GASをコピペするだけです。

Googleスプレッドシートを用意する

まずは、データを受け取るためのスプレッドシートを用意しましょう。

Googleドライブで、左上の「新規」をクリックし、「Googleスプレッドシート」→「空白のスプレッドシート」を選びます。

ファイル名は「カレンダー出力」など、自分がわかりやすい名前にしてください。

GASを設定する

次に、カレンダーの予定を自動で引っ張ってくるための「GAS(Google Apps Script)」を設定します。

「プログラムなんてわからない……」という人も安心してください。

紹介するコードをコピペするだけで完了します。

Apps Scriptを開く

スプレッドシートの上部メニューから、「拡張機能」→「Apps Script」 をクリックします。

コードをコピペする

エディタ画面が開いたら、最初から書かれている文字列をすべて消去してください。

そして、代わりに以下のコードを貼り付けます。

/**
 * スプレッドシートを開いたときに自動でメニューを追加する
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('📅 カレンダー抽出')
    .addItem('予定をシートに書き出す', 'exportCalendarWithPopup')
    .addToUi();
}

/**
 * カレンダーの予定を抽出し、シートに書き出す
 */
function exportCalendarWithPopup() {
  const ui = Browser;

  const calPrompt = "取得したいカレンダー名を入力してください。\n(自分のメインカレンダーの場合は何も入力せず「OK」を押してください)";
  const calName = ui.inputBox("1/3 カレンダーの指定", calPrompt, ui.Buttons.OK_CANCEL);
  if (calName === "cancel") return;

  const startPrompt = "いつからの予定を取得しますか?\n(入力例:2025/04/01)\n※何も入力せず「OK」を押すと【今日から1年前】になります。";
  const startDateStr = ui.inputBox("2/3 期間の指定(開始日)", startPrompt, ui.Buttons.OK_CANCEL);
  if (startDateStr === "cancel") return;

  const endPrompt = "いつまでの予定を取得しますか?\n(入力例:2026/03/31)\n※何も入力せず「OK」を押すと【今日まで】になります。";
  const endDateStr = ui.inputBox("3/3 期間の指定(終了日)", endPrompt, ui.Buttons.OK_CANCEL);
  if (endDateStr === "cancel") return;

  const today = new Date();
  const oneYearAgo = new Date();
  oneYearAgo.setFullYear(today.getFullYear() - 1);

  const startDate = (startDateStr === "") ? oneYearAgo : new Date(startDateStr);
  const endDate = (endDateStr === "") ? today : new Date(endDateStr);

  if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
    ui.msgBox("エラー", "日付の形式が正しくありません。「YYYY/MM/DD」の形式でやり直してください。", ui.Buttons.OK);
    return;
  }
  
  // 終了日の終日(23:59:59)まで予定に含めるための調整
  endDate.setHours(23, 59, 59);

  let calendar;
  if (calName === "") {
    calendar = CalendarApp.getDefaultCalendar();
  } else {
    const calendars = CalendarApp.getCalendarsByName(calName);
    calendar = calendars.length > 0 ? calendars[0] : CalendarApp.getCalendarById(calName);
  }

  if (!calendar) {
    ui.msgBox("エラー", "「" + calName + "」というカレンダーが見つかりませんでした。", ui.Buttons.OK);
    return;
  }

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.clear();
  sheet.appendRow(["開始日時", "終了日時", "タイトル", "場所", "詳細・説明"]);

  const tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();
  const events = calendar.getEvents(startDate, endDate);

  const rows = events.map(event => [
    Utilities.formatDate(event.getStartTime(), tz, "yyyy-MM-dd HH:mm"),
    Utilities.formatDate(event.getEndTime(), tz, "yyyy-MM-dd HH:mm"),
    event.getTitle(),
    event.getLocation(),
    event.getDescription()
  ]);

  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, 5).setValues(rows);
    ui.msgBox("完了!", rows.length + " 件の予定をシートに書き出しました。", ui.Buttons.OK);
  } else {
    ui.msgBox("お知らせ", "指定された期間に予定はありませんでした。", ui.Buttons.OK);
  }
}

コードを貼り付けたら、画面上部にある「フロッピーディスクのアイコン」をクリックして保存します。

これでGAS側の設定は完了です。

「実行」ボタンなどは押さなくてかまいません。

メニューから実行する

ここからは実際にスクリプトを動かしてみましょう。

スプレッドシートを閉じて開き直す

設定が終わったら、一度スプレッドシートを閉じて、開き直してください。

メニューからスクリプトを実行する

すると、開き直したスプレッドシートのメニューに新しく「📅 カレンダー抽出」というボタンが増えています。

その「📅 カレンダー抽出」を押し、「予定をシートに書き出す」をクリックします。

【注意】初回には「承認」が必要

初めて実行するときは「承認が必要です」というメッセージが出ます。

以下の手順で進めてください。

  1. 「続行」をクリックし自分のGoogleアカウントを選択
  2. 「詳細」をクリックし「(安全ではないページ)に移動」をクリック
  3. アクセスを求める画面が出たら、すべてのチェックボックスにチェックを入れる
  4. 最後に「許可」をクリック

ポップアップの指示に従う

スクリプトが動くと画面にポップアップが表示されます。

以下の3つの質問に答えていくだけで、Googleカレンダーのその期間のデータがGoogleスプレッドシートに抽出されます。

項目内容
カレンダーの指定Googleカレンダーで作った「カレンダー名」をそのまま入力。自分のメインカレンダーを取得する場合は何も入力せずに「OK」を押す)
期間の指定(開始日)抽出したい期間の開始日。なにも入力せずに「OK」を押すと「今日から1年前の日付」が自動的に設定されます
期間の指定(終了日)抽出したい期間の終了日。なにも入力せずに「OK」を押すと「今日まで」が自動的に設定されます

実行が完了すると、スプレッドシートに指定した期間の予定が書き出されます。

これなら「あの月の予定だけほしい」というときでも直感的に操作できますよ!

【注意】過去のデータを残したい場合

このスクリプトは、実行するたびに「今開いているシート」の中身を一度リセットして上書きする仕組みになっています。

そのため、もし以前に書き出したデータを残したまま別の期間の予定を書き出したい場合は注意が必要です。

必ず画面左下にある「+」ボタンを押して新しいシートを追加し、その新しい空のシートを開いた状態で実行してください。

そうすれば過去のデータが消えることなく、別シートに保存できます。

まとめ

今回は、GASを使ってGoogleカレンダーの予定を一括でスプレッドシートに書き出す方法を紹介しました。

ポイント

  • GASを使えばコピペだけで設定できる
  • 確定申告の確認や振り返りがラクになる
  • Gemini NotebookなどのAIにデータを入れ、レビューさせるのがおすすめ

手作業でカレンダーをさかのぼる時間を、これからは有意義な時間に使えます。

プログラミングの知識がなくてもコピペだけで効率化できるので、ぜひ試してみてください!