GoogleカレンダーをExcelにエクスポートする|表にして数える

google カレンダー excel エクスポートで調べている人が求めているのは、たいてい「予定の一覧を表にして、何にどれだけ時間を使ったか数えたい」という結果です。ところがGoogleカレンダーが書き出せるファイルは1種類しかなく、それはExcelがそのまま表として開ける形式ではありません。ここでは公式の手順で何が手に入るのかを押さえてから、Excelの表にするまでの4つの道を手間と精度で並べ、数え始める前に決めておくべきことまで順に整理します。

Googleカレンダーが書き出せる形式は1種類だけ

まず公式の手順です。パソコンでGoogleカレンダーを開き、右上の設定から[設定]を開き、左側の[インポート / エクスポート]を選んで[エクスポート]をクリックします。すべてのカレンダーをまとめて書き出すと.zipファイルがダウンロードされ、中には個別の.icsファイルが入っています。カレンダーを1つだけ書き出す場合は、[マイカレンダー]でそのカレンダーにカーソルを合わせ、[その他]から[設定と共有]を開き、[カレンダーの設定]の[カレンダーをエクスポート]をクリックすると.icsファイルがダウンロードされます。

ここで押さえておきたい制約が3つあります。1つ目は形式で、CSVやExcel形式で書き出す選択肢は用意されていません。2つ目は端末で、公式のヘルプは書き出せるのはパソコンのみで、スマートフォンやタブレットには対応していないと明記しています。3つ目は権限で、書き出すには対象のカレンダーに対して変更および共有の管理ができる権限が必要です。会社や学校のアカウントでは、管理者が書き出しそのものを制限している場合もあります。

逆方向は少し事情が違います。Googleカレンダーへの読み込みは.icsだけでなくCSVにも対応しています。つまりCSVは「Googleに入れるための形式」として用意されていて、「Googleから出すための形式」としては用意されていない、という非対称があります。この非対称を知らないまま設定画面を探し続けている人が多く、探しても見つからないのは操作を見落としているからではありません。

.icsをExcelで開いても表にならない理由

.icsはiCalendarという規格のテキストファイルで、仕様はRFC 5545として2009年9月に公開されています。中身は1行1項目のテキストで、1件の予定がBEGIN:VEVENTからEND:VEVENTまでの塊として並びます。開始時刻はDTSTART、終了時刻はDTEND、件名はSUMMARY、繰り返しの規則はRRULEという名前の行です。拡張子を.csvに変えても、Excelは列として認識できません。

厄介なのは行の折り返しです。仕様は、1行の長さは改行を除いて75オクテットを超えるべきではないと定めていて、長い行はCRLFと空白1文字を挟んで次の行に続けるという方式で分割されます。

Lines of text SHOULD NOT be longer than 75 octets, excluding the line break. Long content lines SHOULD be split into a multiple line representations using a line "folding" technique. 出典: rfc-editor.org

説明の長い予定は途中でぶつ切りになって次の行に続くため、素朴に1行ずつ読むと1件の予定が複数件に見えます。会議の説明にURLや議事メモが入っていると、この現象がほぼ確実に起きます。折り返しを戻す処理を通さずに作った表は、件数の段階で合いません。

もう1つ、集計で必ず引っかかるのが終日予定の終わりの扱いです。仕様はDTENDを予定の非包含の終わりと定めています。仕様書自身の例では、6月28日から7月8日までの催しに対してDTENDは7月9日になります。1日だけの終日予定も、翌日の日付が終わりとして書かれます。この仕様を知らずに終わりから始まりを引くと、終日予定はすべて1日長く出ます。日数を数える表を作るなら、終日予定だけは引き算の前に1日戻す処理が必要です。

Excelに持っていく4つの道

ここまでの制約を踏まえると、表にするまでの道は大きく4つです。手間と精度が違うので、目的で選びます。

道 手間 向いている目的 注意点
画面を見て手で入力する 件数に比例して増える 7日間程度など数十件まで 件数が増えると転記の誤りが混ざる
変換サービスに.icsを渡す 数分 一度だけ数えたいとき 予定の中身を社外のサービスに渡すことになる
Apps Scriptでスプレッドシートに書き出す 最初の30分 毎月続けて数えたいとき 最初にコードを用意する必要がある
ほかのカレンダーソフトを経由する 中程度 手元のソフトに慣れている場合 経路ごとに落ちる項目が違う

おすすめの決め方は、回数です。1回で終わるなら手入力か変換サービス、毎月続けるならApps Scriptが妥当な線になります。仕事の予定を扱うなら、社外のサービスにファイルを渡す前に、件名と参加者の情報が社内の規定で持ち出してよいものかを確かめる手順を1つ挟んでおくのが安全です。

繰り返しの予定は、どの道でも最後まで残る問題です。.icsの中では、毎週の定例会議は1件のVEVENTとRRULEという規則だけで表現されています。ファイルの中に52行あるわけではありません。回数を数える表を作るなら、規則を展開して実際の日付に開く処理が別に必要です。Apps ScriptやカレンダーのAPIは展開済みの予定を返すため、この点では規則を自分で解釈するより確実です。

Apps Scriptでスプレッドシートに書き出す手順

毎月数えるなら、この道が結局いちばん短くなります。Google Apps ScriptにはCalendarAppというカレンダー操作の仕組みが用意されていて、公式のリファレンスに期間を指定して予定を取る方法が並んでいます。期間で取るのがgetEvents、特定の1日の予定を取るのがgetEventsForDayです。取った予定から件名、開始、終了、場所、参加者を読み出して、スプレッドシートの行として書いていく形になります。

手順の骨組みは次の通りです。

  • Googleスプレッドシートを新しく作り、拡張機能からApps Scriptを開きます。
  • 対象のカレンダーを指定し、集計したい期間の開始日と終了日を決めます。
  • その期間の予定を取り、1件を1行としてシートに書き出します。
  • 終日予定だけは終わりの日付を1日戻して、所要時間を計算します。

スプレッドシートに入ってしまえば、Excel形式でのダウンロードは書き出しメニューから選ぶだけです。CSVを経由せずに済むので、文字化けの心配もありません。時間の合計や案件ごとの集計は、スプレッドシートの側で関数を組んでおけば、翌月は期間を書き換えて実行するだけで済みます。

この道の利点は、繰り返しの予定が展開された状態で取れることと、折り返しの処理が要らないことです。.icsの解析で起きる誤りが最初から発生しません。欠点は、最初に短いコードを書く必要があることと、カレンダーへのアクセス許可を求める画面が1度出ることです。

掲示板で回っている手順と、公式の案内の差

この話題では、ほかのカレンダーソフトを経由してCSVにする手順がよく紹介されます。質問サイトでは次のような形で回っています。

件数次第ではコピペより簡単という程度の手段ですと、Google カレンダーのデータをエクスポート、エクスポートしたファイルを Outlook で開く、Outlook から「ファイルにエクスポート」で CSV形式ファイルに保存、Excel から CSV形式ファイルをインポート、という手順で可能です。 出典: detail.chiebukuro.yahoo.co.jp

ただし、この経路を選ぶ前に知っておくべき差があります。Microsoftが公開している手順では、予定の書き出し先として案内されているのはOutlookデータファイル(.pst)とiCalendar形式で、CSVは連絡先の書き出し手順として案内されています。またMacで使う場合、Microsoftは従来のOutlook for Macの書き出しについて、現時点で利用できる書き出しの選択肢はアーカイブファイル(.olm)のみであると明記しており、同じページで従来のOutlook for Macのサポートは2026年10月に終了すると案内しています。

つまりこの経路は、Windowsのパソコンが手元にあり、なおかつソフトの版によって結果が変わることを承知の上で試すもの、という位置づけになります。手元にMacしかない場合は、Apps Scriptか変換サービスのほうが早く着きます。

数え始める前に決めておく3つのこと

表が出来上がってから決めると、集計をやり直すことになる項目が3つあります。

1つ目は、時間を使わない扱いにしている予定をどう数えるかです。iCalendarの仕様にはTRANSPという項目があり、既定はOPAQUE、つまり時間を占める扱いです。時間を占めない扱いにした予定はTRANSPARENTになり、空き時間の検索からは見えません。Googleカレンダーの画面では、予定の[予定の表示]を「空き時間」にした予定がこれに当たります。誕生日や終日の目印をこの設定にしている場合、稼働時間の合計に混ぜると数字が膨らみます。

2つ目は、辞退した予定と、まだ返事をしていない予定の扱いです。カレンダーに残っているだけで参加していない会議は少なくありません。参加状況の列を作って、集計時に外せるようにしておきます。

3つ目は、移動時間です。ほとんどのカレンダーには移動が記録されていません。渋谷での打ち合わせと品川での打ち合わせが並んでいても、その間の40分はどこにも書かれていないため、表の上では会議の時間しか出てきません。実際に使った時間を数えたいなら、移動を1件の予定として記録する運用に変えるところから始める必要があります。

数えたあとに手を打つ場所

表にして合計を出すと、たいてい2つのことが分かります。会議の合計が思っていたより多いこと、そして予定のない時間が細かく散らばっていて使えていないことです。前者は断る判断の話ですが、後者は予定の組み方で変わります。

散らばりの原因の多くは、移動が予定になっていないことにあります。Mac用のカレンダーアプリの側では、住所から車と徒歩と電車の所要時間を計算して移動の枠を作る作りのものがあり、移動が時間を占める予定として並ぶと、数える前から詰め込みすぎが分かります。この計算の挙動は移動時間に整理されています。

記録が続くかどうかは、入力の手間で決まります。話し言葉と音声で予定を入れられる形にして、「明日15時 商談 @渋谷」と1行書けば日時と件名と場所に分解される仕組みなら、移動や作業時間も面倒がらずに記録できます。入力の実例は予定の入れ方に並んでおり、機能の全体像はできることにまとめられています。

集計を毎月続けるなら、書き出して数える作業自体を減らす方向も検討に値します。Macで使えるカレンダーアプリを総額で並べた一覧は他のカレンダーとの比較にあり、対応環境やデータの扱いはよくある質問に書かれています。

数えるために最初にやることは1つです。今月の7日間だけを対象に、終日予定と辞退した予定を外して合計を出してみることです。7日間で数え方が固まれば、1年に広げるのは同じ処理の繰り返しになります。

よくある質問

GoogleカレンダーからExcel形式で直接エクスポートできますか?

できません。公式の[インポート / エクスポート]で書き出せるのは、すべてのカレンダーをまとめた.zipファイルと、カレンダー1つの.icsファイルだけです。CSVやExcel形式を選ぶ項目は用意されていません。Excelの表にしたい場合は、.icsを変換するか、Apps Scriptでスプレッドシートに書き出してからExcel形式で保存する形になります。

.icsファイルの拡張子をcsvに変えればExcelで開けますか?

開くことはできますが、表にはなりません。.icsは1行1項目のテキストで、列の区切りがカンマではないためです。さらに長い行は75オクテットで折り返されて次の行に続く仕様なので、素朴に読み込むと1件の予定が複数行に散ります。変換処理を通さずに集計すると、件数の段階で合いません。

毎月同じ集計を続けたいときはどの方法が向いていますか?

Apps ScriptのCalendarAppでスプレッドシートに書き出す方法です。期間を指定して予定を取るgetEventsを使えば、繰り返しの予定も実際の日付に展開された状態で取れます。シート側に集計の関数を組んでおけば、翌月は期間を書き換えて実行するだけで済み、Excel形式での保存も書き出しメニューから選べます。

終日予定の日数が1日多く出るのはなぜですか?

iCalendarの仕様がDTENDを予定の非包含の終わりと定めているためです。仕様書の例でも、6月28日から7月8日までの催しのDTENDは7月9日になっています。終わりから始まりを引くと1日多く出るので、終日予定だけは引き算の前に終わりの日付を1日戻す処理を入れてください。

記事一覧へ戻る