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アカウントの認証が必要で、初回実行時に許可を求められます。また、取得できる予定は、スクリプトを実行するアカウントがアクセス権を持つカレンダーに限られます。この仕組みを理解すれば、予定の一覧作成や集計が簡単になります。
カレンダーの予定をスプレッドシートに取り込む手順
ここからは、実際にスクリプトを記述して予定を取り込む方法を解説します。以下の手順を順に行ってください。
スクリプトエディタを開く
- スプレッドシートを開く
Googleスプレッドシートを新規作成するか、既存のシートを開きます。ここでは新規シートを使うことをおすすめします。 - 拡張機能メニューからApps Scriptを選択
メニューバーの「拡張機能」をクリックし、表示されたメニューから「Apps Script」を選択します。すると別タブでスクリプトエディタが開きます。 - プロジェクト名を設定
スクリプトエディタの左上にある「無題のプロジェクト」をクリックして、分かりやすい名前(例:カレンダー連携)に変更します。
スクリプトを記述する
- デフォルトのコードを削除する
エディタに表示されているfunction myFunction() { … } のコードをすべて削除します。 - 以下のスクリプトをコピー&ペーストする
次のスクリプトをエディタに貼り付けます。このスクリプトは、今日から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); } } - スクリプトを保存する
ツールバーのフロッピーディスクアイコンをクリックするか、Ctrl+S(MacはCmd+S)で保存します。プロジェクト名が未設定の場合は設定を促されます。
スクリプトを実行する
- 実行ボタンをクリック
ツールバーの▷(実行)ボタンをクリックします。初回実行時には権限の承認が求められます。 - 権限を承認する
ポップアップが表示されたら「許可を確認」をクリックし、自分のGoogleアカウントを選びます。次に「カレンダーの表示・管理」と「スプレッドシートの表示・管理」の許可を求められるので、「許可」をクリックします。承認後、スクリプトが実行されます。 - 結果を確認する
元のスプレッドシートに戻ると、アクティブなシートに予定が一覧で書き込まれていることを確認できます。正しく表示されない場合は、スクリプトにエラーがないかエディタの「表示」→「ログ」で確認してください。
トリガーを設定して自動更新する
- トリガー設定画面を開く
スクリプトエディタの左側にある時計アイコン(トリガー)をクリックします。 - トリガーを追加する
右下の「トリガーを追加」をクリックします。表示されたダイアログで、実行する関数を「getCalendarEvents」に、デプロイを「Head」に、イベントのソースを「時間主導型」に、時間の間隔を「1時間ごと」など好みの頻度に設定します。最後に「保存」をクリックします。 - 承認が必要な場合
トリガーの保存時にも権限承認を求められることがあります。手順に従って許可してください。これで、設定した間隔で自動的に予定が更新されるようになります。
注意点とよくあるトラブル
タイムゾーンが正しく反映されない
スクリプトで取得した時間が意図したタイムゾーンと異なる場合があります。その場合は、スクリプトの先頭で `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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
