スプレッドシートで期限管理③|GASでGoogleカレンダーに登録!管理者向けタスク管理

前回の記事では、期限が近づいたタスクを担当者にGmailでリマインダーを送る方法をご紹介しました。
それに加えて、管理者やリーダーがチーム全体のタスク状況をカンタンに把握できる方法があれば、より効率的な管理が可能になります。
そこで今回は、未完了のタスクを管理者のGoogleカレンダーに自動登録する方法をご紹介します。
この方法を活用することで、
- チームのタスク期限をカレンダー上で可視化
- 重要なタスクを見逃さず、進捗状況を把握
- 対応漏れを防ぎ、スムーズな業務遂行が可能
となり、より効果的なタスク管理が実現できます。

完成イメージ


- GASでスプレッドシートのタスク情報をチェック
- 期限が「2日以内」の未完了タスクを自動で管理者(スクリプト実行者)カレンダーに登録
- タイトルは「【リマインダー】タスク名」、詳細には担当者・期限日・リマインドメッセージを記載
- 管理者がチームのタスクをカレンダーで把握するのに活用
手順
GASの実行手順

今回の例では、以下の入力項目をもとに期限を判定し、カレンダー登録を行います。
- シート名:タスク管理
- A列:タスク名
- B列:担当者
- C列:期限
- D列:進捗状況
シート名を「タスク管理」として、GAS実行時にそのシートを参照します。
(シート名を変更する場合はGASのスクリプトも併せてご変更ください)

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function addTasksToManagerCalendar() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("タスク管理");
var data = sheet.getDataRange().getValues();
var today = new Date();
var calendar = CalendarApp.getDefaultCalendar(); // 実行者のカレンダーを取得
for (var i = 1; i < data.length; i++) {
var task = data[i][0]; // タスク名
var person = data[i][1]; // 担当者
var deadline = new Date(data[i][2]); // 期限日
var status = data[i][3]; // 進捗状況
var daysUntilDeadline = Math.ceil((deadline - today) / (1000 * 60 * 60 * 24));
// 期限が「2日以内」で、かつ「完了」でない場合にカレンダー登録
if (daysUntilDeadline <= 2 && daysUntilDeadline > 0 && status != "完了") {
var eventTitle = "【リマインダー】" + task;
var eventDetails = "タスクの期限が近づいています。\n" +
"担当者: " + person + "さん\n" +
"タスク: " + task + "\n" +
"期限: " + deadline.toLocaleDateString() + "\n\n" +
"期限まであと" + daysUntilDeadline + "日です。対応状況を確認してください。";
// 実行者のGoogleカレンダーに予定を追加
calendar.createAllDayEvent(eventTitle, deadline, {description: eventDetails});
Logger.log("カレンダー登録成功: " + eventTitle);
}
}
}
スクリプトの説明
- シート情報の取得
-
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("タスク管理");
- スクリプトが実行されると、「タスク管理」 というシートを取得します。
- 必要に応じてシート名とスクリプトをご変更ください。
- シートのデータをすべて取得
-
var data = sheet.getDataRange().getValues();
- スプレッドシート全体のデータ を
data
という配列に格納します。
- スプレッドシート全体のデータ を
- 現在の日付を取得
-
var today = new Date();
- 今日の日付を取得し、期限までの日数を計算するために使用します。
- データを1行ずつ処理(1行目はヘッダーのためスキップ)
-
for (var i = 1; i < data.length; i++) {
- 2行目以降(i=1)から順に処理 します。
- 各行から必要な情報を取得
-
var task = data[i][0]; // タスク名 var person = data[i][1]; // 担当者 var deadline = new Date(data[i][2]); // 期限日 var status = data[i][3]; // 進捗状況
- スプレッドシートの各列のデータを変数に格納します。
- A列(タスク名) →
task
- B列(担当者) →
person
- C列(期限日) →
deadline
- D列(進捗状況) →
status
- A列(タスク名) →
- スプレッドシートの各列のデータを変数に格納します。
- 期限までの日数を計算
-
var daysUntilDeadline = Math.ceil((deadline - today) / (1000 * 60 * 60 * 24));
deadline
(期限日)とtoday
(今日の日付)の差分を計算し、期限までの日数(整数値) を求めます。Math.ceil()
を使い、小数点以下を切り上げます。(例: 1.5日 → 2日)
- 条件に一致するタスクのみカレンダーに登録
-
if (daysUntilDeadline <= 2 && daysUntilDeadline > 0 && status != "完了") {
- 以下の条件を満たす場合にメールを送信します。
- 期限が「2日以内」かつ「今日より未来の日付」
- 「完了」になっていないタスク
- 以下の場合は登録されません。
- 期限が3日以上先
- 期限が過ぎている(期限切れタスク)
- すでに「完了」しているタスク
- 以下の条件を満たす場合にメールを送信します。
- カレンダーイベントのタイトルと詳細を作成
-
var eventTitle = "【リマインダー】" + task; var eventDetails = "タスクの期限が近づいています。\n" + "担当者: " + person + "さん\n" + "タスク: " + task + "\n" + "期限: " + deadline.toLocaleDateString() + "\n\n" + "期限まであと" + daysUntilDeadline + "日です。対応状況を確認してください。";
- タイトル:【リマインダー】タスク名
- カレンダーの詳細情報
例タスクの期限が近づいています。
担当者: 田中さん
タスク: タスク①
期限: 2/22/2025
期限まであと1日です。対応状況を確認してください。
- カレンダーにイベントを登録
-
calendar.createAllDayEvent(eventTitle, deadline, {description: eventDetails});
- Googleカレンダーに「終日イベント」として登録します。
- 送信ログを記録
-
Logger.log("カレンダー登録成功: " + eventTitle);
- Google Apps Scriptのログにカレンダー登録成功のメッセージを出力します。

スクリプトを書いたら、好きな名前を付けて保存します。
(例:「タスク期限_カレンダー登録」)

管理者自身がスクリプトを実行すると、自分のカレンダーに登録されます。
トリガーを設定してGASを自動実行
トリガーを設定することで、毎日または特定の時間間隔で自動実行が可能です。


Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

「時計アイコン」をクリックしてトリガーページを開きます。

「トリガーを追加」または「新しいトリガーを作成します」をクリックします。
(時間主導型を選択した例)

- 実行する関数を選択
-
- トリガーを実行した際に動かす関数を指定します。
- 例:
addTasksToManagerCalendar
- 実行のデプロイを選択:
-
- どのバージョンのスクリプトを使用してトリガーを実行するかを選びます。
- 通常は「
Head
」を選択して、最新のバージョンを使用します。
- イベントのソースを選択
-
- トリガーのきっかけとなるイベントを指定します。
- 「時間主導型」などの選択肢があります。
- 時間主導型は、指定されたスケジュールに基づいてスクリプトを実行するものです。
- 時間ベースのトリガーのタイプを選択
-
- 時間主導型のイベントソースを選択した場合に表示され、どの頻度で実行するかを設定します。
- 「
日付ベースのタイマー
」を選択すると、毎月決まった時間にスケジュールを設定できます。

保存をクリックして、トリガー設定完了となります。
これで毎日決まった時間にスクリプトが実行されます。

設定したトリガーは一覧で表示されます。
まとめ
Google Apps Script (GAS) を使えば、期限の迫ったタスクをカレンダーに登録することができます。
「どのタスクが未完了か?」を管理者がカレンダー上で視覚的に確認 できるため、適切な対応がしやすくなります。
チームのタスクを管理する時にご活用ください。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント