「日々の業務に追われて、大切な請求書の支払期限を忘れてしまった…」
「お客様への回答がSLA(サービス品質保証)の期限を過ぎてしまい、信頼を損ねてしまった…」
このような経験は、多くの方が一度は体験したことがあるのではないでしょうか。
タスク管理ツールを導入するほどではないけれど、スプレッドシートでの管理だけでは抜け漏れが心配。そんなお悩みを抱えていませんか?
実は、普段お使いのGoogleスプレッドシートに少し工夫を加えるだけで、無料で簡単に「自動リマインドシステム」を構築できます。
この記事では、Google Apps Script(GAS)というプログラミング言語を使って、スプレッドシートで管理しているタスクの期限が近づいたら、自動でメール通知を送る方法を解説します。
この記事を読み終える頃には、あなたも面倒な期限管理から解放され、本来の業務に集中できる環境を手に入れているはずです。
なぜ自動リマインドが必要なのか?
手動でのタスク管理には、常に「見落とし」や「確認忘れ」といったヒューマンエラーのリスクが伴います。特に、複数の案件を同時に抱えていると、そのリスクはさらに高まります。
自動リマインドを導入することで、以下のメリットが得られます。
- 抜け漏れの防止: 機械が自動で通知してくれるため、人的な確認ミスがなくなります。
- 心理的負担の軽減: 「あの件、大丈夫だったかな?」と常に気にする必要がなくなり、精神的な負担が減ります。
- 業務効率の向上: 確認作業にかけていた時間を削減し、より生産的な業務に集中できます。
3ステップで完成!自動リマインドの仕組み
これから作成する自動リマインドの仕組みは、大きく分けて3つのステップで完成します。
- 準備編: スプレッドシートでタスク管理表を作成する
- 実践編: GASを使ってメールで通知を送るスクリプトを作成する
- 自動化編: 作成したスクリプトを毎日決まった時間に実行するよう設定する
専門用語も出てきますが、その都度わかりやすく解説しますのでご安心ください。
準備編:タスク管理表を作成しよう
まずは、リマインドの元となるタスク管理表をスプレッドシートで作成します。
今回は、顧客からの問い合わせ管理を例に作成してみましょう。
1. 新しいスプレッドシートを作成する
Googleドライブで「新規」>「Googleスプレッドシート」を選択し、新しいシートを作成します。ファイル名は「タスク管理表」など、分かりやすいものにしましょう。
2. シート名とヘッダー(項目名)を設定する
デフォルトで作成される「シート1」の名前を「チケット管理」に変更します。
次に、1行目に以下の項目名を入力してください。
A列 | B列 | C列 | D列 | E列 | F列 |
ID | 顧客名 | 担当者 | 状態 | 期限 | 備考 |
3. テストデータを入力する
実際にデータが入力されている方がイメージしやすいので、いくつかサンプルデータを入力してみましょう。「状態」は「未着手」「対応中」「完了」の3種類、「期限」は日付だけでなく時間まで入力するのがポイントです。

これで、リマインドの元となるデータの準備が整いました。
実践編:GASでGmailに通知を送ろう
ここからが本番です。GASを使って、期限が迫ったタスクをメールで通知するスクリプト(コンピュータに対する命令をまとめたプログラムのこと)を書いていきましょう。
Step 1: スクリプトエディタを開く
まず、GASを記述するための「スクリプトエディタ」を開きます。
スプレッドシートのメニューから「拡張機能」>「Apps Script」を選択してください。

すると、新しいタブでスクリプトエディタが開きます。最初は myFunction という空の関数が用意されていますが、一度すべて削除してしまいましょう。
Step 2: スクリプトを記述する
いよいよスクリプトを書いていきます。
先ほど開いたスクリプトエディタに、以下のコードをそのままコピー&ペーストしてください。
// 通知を送信するメールアドレスを設定
const RECIPIENT_EMAIL = 'manager@example.com';
// リマインドを実行するメインの関数
function checkTaskDeadlines() {
// ①スプレッドシートの情報を取得する
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('チケット管理');
// 2行目から最終行までのデータを取得(1行目はヘッダーなので除く)
const tasks = sheet.getRange(2, 1, sheet.getLastRow() - 1, 6).getValues();
// ②現在の日時を取得する
const now = new Date();
// ③通知メールの本文を作成する
let mailBody = '';
// 取得したタスクを1行ずつチェックする
tasks.forEach(function(task) {
const status = task[3]; // D列の「状態」
const deadline = new Date(task[4]); // E列の「期限」
// 状態が「完了」でなく、かつ期限が過ぎているタスクをチェック
if (status !== '完了' && deadline < now) {
const taskId = task[0]; // A列の「ID」
const customerName = task[1]; // B列の「顧客名」
const staffName = task[2]; // C列の「担当者」
// 期限を「YYYY/MM/DD HH:MM」の形式に整える
const deadlineString =
deadline.getFullYear() + '/' +
('0' + (deadline.getMonth() + 1)).slice(-2) + '/' +
('0' + deadline.getDate()).slice(-2) + ' ' +
('0' + deadline.getHours()).slice(-2) + ':' +
('0' + deadline.getMinutes()).slice(-2);
// メール本文に行を追加していく
mailBody += `【期限超過】\nID: ${taskId}\n顧客名: ${customerName}\n担当: ${staffName}\n期限: ${deadlineString}\n\n`;
}
});
// ④メール本文があればGmailで通知する
if (mailBody) {
const subject = '【SLA期限超過アラート】対応が必要なタスクがあります';
// メールを送信
GmailApp.sendEmail(RECIPIENT_EMAIL, subject, mailBody);
}
}
貼り付けたら、1行目の'manager@example.com'
の部分を、通知を受け取りたいメールアドレスに書き換えてください。
コードを保存するには、エディタ上部の保存ボタンをクリックするか、Ctrl+S(Macは⌘S)を押してください。
コードの簡単な解説:
- ①スプレッドシートの情報を取得する: getSheetByName(‘チケット管理’)で操作対象のシートを指定し、getValues()でシート上のデータをまとめて取得しています。
- ②現在の日時を取得する: new Date()で、このスクリプトが実行された瞬間の日時を取得します。
- ③通知メッセージを作成する: tasks.forEachで、取得したタスクを1件ずつループ処理しています。if (status !== ‘完了’ && deadline < now)の部分で、「状態が完了ではなく、かつ期限が現在時刻を過ぎている」タスクだけを対象に、メール本文を作成しています。
- ④メール本文があればGmailで通知する: 作成したメール本文が存在する場合(if (mailBody))、GmailApp.sendEmail()を使って指定したアドレスにメールを送信しています。第1引数が宛先、第2引数が件名、第3引数が本文です。
自動化編:トリガーで定期実行しよう
最後に、このスクリプトを毎日決まった時間に自動で実行するための「トリガー」を設定します。これを設定することで、あなたが何もしなくてもGASが自動で期限をチェックしてくれるようになります。
- スクリプトエディタの左側にあるメニューから、目覚まし時計のアイコン(トリガー)をクリックします。
- 右下の「トリガーを追加」ボタンをクリックします。
- 以下の通りに設定し、「保存」をクリックします。
- 実行する関数を選択: checkTaskDeadlines
- 実行するデプロイを選択: Head
- イベントのソースを選択: 時間主導型
- 時間ベースのトリガーのタイプを選択: 日付ベースのタイマー
- 時刻を選択: 午前8時~9時 (お好きな時間帯を選択してください)

初めてトリガーを設定する際には、「承認が必要です」という画面が表示されることがあります。これは、作成したスクリプトにスプレッドシートへのアクセスなどを許可するための大切な手順です。詳しい承認方法については、こちらの記事で詳しく解説していますので、参考にしてください。
これで全ての設定は完了です!
設定した時間になると、スクリプトが自動で実行され、もし期限超過したタスクがあればメールに以下のような通知が届きます。

発展編:さらに便利な機能を追加する
基本の仕組みは完成しましたが、GASを使えばさらに柔軟なカスタマイズが可能です。いくつか例をご紹介します。
1. 期限が近づいているタスクも通知する(例:24時間前)
現在は期限を「超過」したタスクのみを通知していますが、コードを少し変更すれば「24時間以内」に期限が来るタスクを事前に通知することもできます。
checkTaskDeadlines関数内の②、③、④を以下のように変更します。
// ②現在の日時を取得する
const now = new Date();
const oneDayLater = new Date(now.getTime() + (24 * 60 * 60 * 1000)); // ←この行を追加
// ③通知メールの本文を作成する
let overdueBody = ''; // 期限超過タスク用
let upcomingBody = ''; // 期限間近タスク用
// 取得したタスクを1行ずつチェックする
tasks.forEach(function(task) {
const status = task[3];
if (status === '完了') return; // 状態が「完了」ならスキップ
const deadline = new Date(task[4]);
const taskId = task[0];
const customerName = task[1];
const staffName = task[2];
const deadlineString =
deadline.getFullYear() + '/' + ('0' + (deadline.getMonth() + 1)).slice(-2) + '/' +
('0' + deadline.getDate()).slice(-2) + ' ' + ('0' + deadline.getHours()).slice(-2) + ':' +
('0' + deadline.getMinutes()).slice(-2);
// 期限に応じてメッセージを振り分ける
if (deadline < now) {
overdueBody += `ID: ${taskId}\n顧客名: ${customerName}\n担当: ${staffName}\n期限: ${deadlineString}\n\n`;
} else if (deadline < oneDayLater) {
upcomingBody += `ID: ${taskId}\n顧客名: ${customerName}\n担当: ${staffName}\n期限: ${deadlineString}\n\n`;
}
});
// ④メール本文があればGmailで通知する
let finalBody = '';
let subject = '【タスクリマインダー】';
if (overdueBody) {
finalBody += '--- 期限超過タスク ---\n' + overdueBody;
subject += '【要対応】';
}
if (upcomingBody) {
finalBody += '--- 本日期限のタスク ---\n' + upcomingBody;
}
if (finalBody) {
subject += 'お知らせ';
GmailApp.sendEmail(RECIPIENT_EMAIL, subject, finalBody);
}

2. 件名で重要度を伝える
メールの場合、件名を工夫することで、受信者が一目で内容の緊急性を判断できるようになります。例えば、上記の発展編コードのように、期限超過タスクがある場合は件名に「【要対応】」といった文言を入れると効果的です。
3. 重複通知を防ぐ
一度通知したタスクは、完了になるまで毎日通知されてしまいます。これを防ぐには、「通知ログ」シートを新たに追加し、通知したタスクのIDと日時を記録しておき、次に実行する際に「ログに記録されていないタスクのみを通知対象とする」という処理を追加する方法があります。
まとめ
今回は、GoogleスプレッドシートとGASを使って、タスクの期限を自動でリマインドする仕組みの作り方を解説しました。
- スプレッドシートで管理表を用意する
- GASで期限をチェックし、Gmailで通知する
- トリガーを設定して処理を自動化する
この3つのステップを踏むだけで、高価なツールを使わなくても、業務の抜け漏れを劇的に減らすことができます。
最初は難しく感じるかもしれませんが、一度設定してしまえば、あとはシステムがあなたの代わりに働き続けてくれます。まずはこの記事のコードをコピー&ペーストするところから始めて、あなたの業務効率化に役立ててみてください。
※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。