Calendar Timesheet

Google カレンダーをタイムシートにする方法

2026年10月19日更新。約 7 分で読めます。

クライアントの仕事をすでに Google カレンダーに入れているなら、タイムシートの大部分はもうそろっています。足りないのは、日付と所要時間の一覧と、クライアントごとの合計です。Google カレンダーはそれを作ってくれません。エクスポートで得られるのはカレンダーのファイルであって、表ではないからです。ここでは、無料の手作業から完全な自動化まで 3 つの方法と、気づかないうちに合計を狂わせる細かな点を紹介します。

方法 1:スプレッドシートに手で入力する

Google カレンダーを週ビューで開き、その横で空の Google スプレッドシートを開いて、会議ごとに 1 行ずつ、日付、開始、終了、クライアントを入力します。時間を出すために =(C2-B2)*24 の列を追加し、いちばん下に合計を入れます。

費用はかからず、週に数件の会議なら十分です。それを超えると毎週時間がかかり、入力ミスも目に見えません。入力した 14:30 をカレンダーと照らし合わせて確認し直す人はいないからです。

方法 2:Google スプレッドシートの短いスクリプト

Google スプレッドシートは、Google に組み込まれたスクリプト機能である Apps Script を使ってカレンダーを読み込めます。新しいスプレッドシートで 拡張機能、Apps Script の順に開き、以下を貼り付けて 2 つの日付を調整し、listMonth を実行します。自分で作ったスクリプトの承認を Google から求められます。

function listMonth() {
  var cal = CalendarApp.getDefaultCalendar();
  var start = new Date(2026, 9, 1), end = new Date(2026, 10, 1); // October 2026
  var rows = [['Date', 'Start', 'End', 'Hours', 'Title', 'Colour']];
  cal.getEvents(start, end).forEach(function (e) {
    if (e.isAllDayEvent()) return;
    var hours = (e.getEndTime() - e.getStartTime()) / 3600000;
    rows.push([e.getStartTime(), e.getStartTime(), e.getEndTime(), hours, e.getTitle(), e.getColor()]);
  });
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();
  sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}

Apps Script の月は 0 から数えるため、new Date(2026, 9, 1) は 10月1日です。予定ごとに 1 行、所要時間と色番号が入ります。あとはピボット テーブルや SUMIF で合計が出せます(数式はガイド「Google カレンダーの時間をクライアント別・色別・週別に集計する方法」で紹介しています)。

少しのコードに抵抗がなければ、よい無料の選択肢です。読み込むのはメインのカレンダーだけで、以下に挙げる落とし穴は、自分で対処しない限りすべてそのまま残ります。

方法 3:アドオンで自動化する

アドオンを使えば、同じ読み込みを決まった間隔で代わりに行ってくれます。私たちが開発している Calendar Timesheet は、選んだカレンダーを 1 時間ごとに読み込み、色、カレンダー、タイトルの単語、ゲストのメールドメインで各会議をクライアントに振り分け、今月 シートを常に最新の状態に保ちます。毎月 1 日には前月を締めてクライアントごとの請求明細を作り、概要をメールでお知らせします。任意の期間のエクスポートは無料です。クライアント、単価、オートパイロットは Pro の機能で、最初の月末まで使えるトライアルがあります。

ほかのアドオンには、予定をそのままシートに書き出すものもあり、自分でレポートを作りたい人に向いています。以下の落とし穴こそが、単なるエクスポートと、そのまま請求に使えるタイムシートとの違いです。

合計を狂わせる落とし穴

境目をまたぐ会議

10月31日の 22:00 から 01:00 までのワークショップは、2 か月にまたがります。全体を 10月に数えると 10月は請求しすぎになり、11月は不足します。期間内の部分だけを数えるべきです。

辞退した招待と未回答の招待

カレンダーのスクリプトは、辞退した予定も返します。誰かに招待された会議を断っても、単純なエクスポートにはそのまま入ってしまいます。自分の回答で絞り込みましょう。

終日の予定と「予定なし」の時間

休日、移動日、リマインダーは、終日の予定になっていたり「予定なし」に設定されていたりすることがよくあります。これらは作業時間ではありません。終日の予定を 24 時間として読み込むと、合計が大きく狂います。

2 つのカレンダーにある同じ会議

クライアントから招待され、その会議を自分の仕事用カレンダーにもコピーした場合、両方のカレンダーをエクスポートすると 2 回数えられます。予定には共通の識別子(iCalUID)があり、それを使えば 1 つだけ残せます。

例外のある定期的な会議

ある週は移動し、別の週はキャンセルした毎週の電話会議は、シリーズの設定どおりではなく、実際に行われたとおりに数える必要があります。シリーズではなく、展開した個々の回を読み込みましょう。

タイムゾーン

スプレッドシートとカレンダーのタイムゾーンが違うと、開始時刻がずれます。タイムシートには 1 つのタイムゾーンを使いましょう。通常はスプレッドシートのタイムゾーンです。

信頼できるタイムシートのためのチェックリスト

  1. クライアントの見分け方(色、カレンダー、タイトルの単語、ゲストのドメイン)を 1 つ決めて、それを守ります。
  2. 各会議のうち、期間内の部分だけを数えます。
  3. 辞退した招待、終日の予定、「予定なし」に設定した時間は除外します。
  4. 2 つのカレンダーにある会議は 1 回だけ数えます。
  5. 請求した月はその時点で固定し、後でカレンダーを編集しても送付済みの内容が変わらないようにします。

1 時間ごとに自動で任せたいですか?Calendar Timesheet は、このチェックリストの各項目を、あなた自身の Google スプレッドシートで、アカウントの作成なしで処理します。

無料でインストール