【Googleスプレッドシート】Googleカレンダーの予定を取り込む!Apps Scriptでの連携

【Googleスプレッドシート】Googleカレンダーの予定を取り込む!Apps Scriptでの連携
🛡️ 超解決

Googleスプレッドシートでカレンダーの予定を一覧管理したいと思ったことはありませんか。手動でコピーペーストするのは手間がかかり、ミスも発生します。Apps Scriptを使えば、Googleカレンダーから予定を自動的にスプレッドシートに取り込むことができます。この記事では、Apps Scriptを使って予定を取得し、スプレッドシートに出力する方法を詳しく解説します。具体的なスクリプトの書き方やトリガー設定までを順を追って説明しますので、ぜひ最後までご覧ください。

【要点】Googleカレンダーの予定をスプレッドシートに取り込む方法

  • Apps Scriptエディタを開く操作: スプレッドシートの「拡張機能」メニューから「Apps Script」を選択してスクリプトエディタを起動します。
  • CalendarAppとSpreadsheetAppを使った関数の作成: CalendarAppで指定期間のイベントを取得し、SpreadsheetAppでシートに書き込むスクリプトを記述します。
  • 時間主導型トリガーの設定: 定期的にスクリプトを実行するトリガーを設定し、予定表を自動更新できるようにします。

ADVERTISEMENT

Apps Scriptでカレンダー連携ができる仕組み

Google Apps Scriptは、Googleの各種サービスを操作するためのスクリプト言語です。このスクリプトを使うと、Googleカレンダーの予定情報を取得したり、Googleスプレッドシートにデータを書き込んだりできます。連携の核となるのは、CalendarAppクラスとSpreadsheetAppクラスです。CalendarAppでカレンダーにアクセスしてイベントを取得し、SpreadsheetAppでスプレッドシートのセルに値を設定します。スクリプトの実行にはGoogleアカウントの認証が必要で、初回実行時に許可を求められます。また、取得できる予定は、スクリプトを実行するアカウントがアクセス権を持つカレンダーに限られます。この仕組みを理解すれば、予定の一覧作成や集計が簡単になります。

カレンダーの予定をスプレッドシートに取り込む手順

ここからは、実際にスクリプトを記述して予定を取り込む方法を解説します。以下の手順を順に行ってください。

スクリプトエディタを開く

  1. スプレッドシートを開く
    Googleスプレッドシートを新規作成するか、既存のシートを開きます。ここでは新規シートを使うことをおすすめします。
  2. 拡張機能メニューからApps Scriptを選択
    メニューバーの「拡張機能」をクリックし、表示されたメニューから「Apps Script」を選択します。すると別タブでスクリプトエディタが開きます。
  3. プロジェクト名を設定
    スクリプトエディタの左上にある「無題のプロジェクト」をクリックして、分かりやすい名前(例:カレンダー連携)に変更します。

スクリプトを記述する

  1. デフォルトのコードを削除する
    エディタに表示されているfunction myFunction() { … } のコードをすべて削除します。
  2. 以下のスクリプトをコピー&ペーストする
    次のスクリプトをエディタに貼り付けます。このスクリプトは、今日から1週間分の予定を取得し、アクティブなシートに書き込みます。
    function getCalendarEvents() {
      var calendar = CalendarApp.getDefaultCalendar();
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var startDate = new Date();
      var endDate = new Date();
      endDate.setDate(startDate.getDate() + 7);
      var events = calendar.getEvents(startDate, endDate);
      
      // ヘッダー行を設定
      sheet.getRange(1, 1, 1, 4).setValues([['日付', '開始時間', '終了時間', 'タイトル']]);
      
      // イベントデータを配列に格納
      var data = [];
      for (var i = 0; i < events.length; i++) {
        var event = events[i];
        var startTime = event.getStartTime();
        var endTime = event.getEndTime();
        var title = event.getTitle();
        data.push([startTime.toLocaleDateString(), startTime.toLocaleTimeString(), endTime.toLocaleTimeString(), title]);
      }
      
      // データをシートに書き込む(2行目以降)
      if (data.length > 0) {
        sheet.getRange(2, 1, data.length, 4).setValues(data);
      }
    }

  3. スクリプトを保存する
    ツールバーのフロッピーディスクアイコンをクリックするか、Ctrl+S(MacはCmd+S)で保存します。プロジェクト名が未設定の場合は設定を促されます。

スクリプトを実行する

  1. 実行ボタンをクリック
    ツールバーの▷(実行)ボタンをクリックします。初回実行時には権限の承認が求められます。
  2. 権限を承認する
    ポップアップが表示されたら「許可を確認」をクリックし、自分のGoogleアカウントを選びます。次に「カレンダーの表示・管理」と「スプレッドシートの表示・管理」の許可を求められるので、「許可」をクリックします。承認後、スクリプトが実行されます。
  3. 結果を確認する
    元のスプレッドシートに戻ると、アクティブなシートに予定が一覧で書き込まれていることを確認できます。正しく表示されない場合は、スクリプトにエラーがないかエディタの「表示」→「ログ」で確認してください。

トリガーを設定して自動更新する

  1. トリガー設定画面を開く
    スクリプトエディタの左側にある時計アイコン(トリガー)をクリックします。
  2. トリガーを追加する
    右下の「トリガーを追加」をクリックします。表示されたダイアログで、実行する関数を「getCalendarEvents」に、デプロイを「Head」に、イベントのソースを「時間主導型」に、時間の間隔を「1時間ごと」など好みの頻度に設定します。最後に「保存」をクリックします。
  3. 承認が必要な場合
    トリガーの保存時にも権限承認を求められることがあります。手順に従って許可してください。これで、設定した間隔で自動的に予定が更新されるようになります。

注意点とよくあるトラブル

タイムゾーンが正しく反映されない

スクリプトで取得した時間が意図したタイムゾーンと異なる場合があります。その場合は、スクリプトの先頭で `SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone()` を使ってシートのタイムゾーンを取得し、`Utilities.formatDate()` で整形すると解決できます。また、カレンダー自体のタイムゾーン設定も確認してください。

繰り返しイベントが正しく取得できない

`getEvents()` メソッドは、繰り返しイベントの個別の発生を自動的に展開してくれます。ただし、終日のイベントは開始時間と終了時間が0時基準で返されるため、表示がずれることがあります。その場合は、`event.isAllDayEvent()` で判定して別の書式にするなどの対応が必要です。

スクリプトの実行回数制限に注意する

Apps Scriptには1日あたりの実行回数や総実行時間に制限があります。無料アカウントでは1日あたり90分の実行時間と、トリガーの総実行回数に制限があります。頻繁なトリガー設定は避け、1日1回程度の更新に抑えるのが無難です。大量のイベントを扱う場合は、一度に取得する期間を短くするなどの工夫をしましょう。

カレンダーの選択を間違えないようにする

サンプルスクリプトではデフォルトのカレンダー(`getDefaultCalendar()`)を使用していますが、他のカレンダーを指定したい場合は `CalendarApp.getCalendarById('カレンダーID')` とします。カレンダーIDはGoogleカレンダーの設定から確認できます。間違ったカレンダーを指定すると予定が取得できないため注意してください。

ADVERTISEMENT

手動連携とApps Script連携の比較

項目 手動コピペ Apps Script連携
作業工数 毎回手動で行うため高コスト 一度設定すれば自動化
更新頻度 手動で行うため不定期 トリガーで定期的に自動更新
エラーリスク コピーミスや抜け漏れが発生 スクリプトのバグ以外はほぼなし
カスタマイズ性 自由に整形できるが毎回同じ作業 スクリプトを修正で柔軟に対応可能

まとめ

この記事では、Apps Scriptを使ってGoogleカレンダーの予定をスプレッドシートに取り込む方法を解説しました。サンプルスクリプトをそのまま使えば、今日から1週間分の予定を一覧にできます。トリガーを設定すれば自動更新も可能です。応用として、特定のカレンダーラベルのみを抽出したり、予定をGoogleフォームと連携して入力することもできます。ぜひあなたの業務やプライベートの予定管理に活用してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。