GASで期日になったら自動でアラートメールを周知するスクリプトを共有します。
特に1つのシートでタスク進捗を共有・管理している場合、複数人に同じアラートを送信できるようにしておくと何かと便利です。
GASでアラートメールを作成して期日をお知らせするコード
スプシの期日でアラートメール運用イメージ
運用のイメージは、冒頭画像のシートイメージです。
No | タイトル | 担当 | タスク内容 | 納期・期日 | 進捗 |
---|---|---|---|---|---|
1 | テスト1 | アルル | ファイヤー | 2020/12/16 | ☑ |
2 | テスト2 | アミティ | アイスストーム | 2020/12/16 | □ |
3 | テスト3 | りんご | ダイヤキュート | 2020/12/18 | □ |
4 | テスト4 | ウィッチ | ブラインダムド | 2020/12/18 | □ |
5 | テスト5 | ルルー | ジュゲム | 2020/12/21 | □ |
チェックしたら行の色を変える方法もありますので参考まで↓
参考|スプレッドシート・プルダウンで背景色を設定する方法。これは簡単ベンリ!
GAS・期日アラートメールのコード
GASのアラートメール内容は以下のとおり。
function mailalert() {
var ss,sh,start,last,today,formatDate,ss_url
ss = SpreadsheetApp.getActiveSpreadsheet();
sh = ss.getActiveSheet();
ss_url = ss.getUrl();
start = 3;
last = sh.getLastRow();
today = new Date();
formatDate = Utilities.formatDate(new Date(),"JST","yyyy/MM/dd");
//最後の行まで納期確認!
for (var i = start; i <= last; i++){
var cl0,vl0,cl1,vl1,cl2,vl2,cl3,vl3,cl4,vl4,cl5,vl5
//No
cl0 = "A"+ i;
vl0 = sh.getRange(cl0).getValue();
//タイトル
cl1 = "B"+i;
vl1 = sh.getRange(cl1).getValue();
//発信者
cl2 = "C"+i;
vl2 = sh.getRange(cl2).getValue();
//タスク内容
cl3 = "D"+i;
vl3 = sh.getRange(cl3).getValue();
//納期
cl4 = "E"+i;
vl4 = sh.getRange(cl4).getValue();
//ステータス
cl5 = "F"+i;
vl5 = sh.getRange(cl5).getValue();
// 日付の値がなかったら
if (vl=4 != "") {
b = Utilities.formatDate(vl4,"JST","yyyy/MM/dd");
} else {
b = "";
}
//Gmailの複数宛先を設定
var arrayEmail = [];
arrayEmail.push('test1@gmail.com');
arrayEmail.push('test2@gmail.com'); //任意で追加
arrayEmail.push('test3@gmail.com'); //任意で追加
//GOUTLOOKの複数宛先を設定(変数で格納せず、直接メアドを記入)
var arrayoutlook = ("hoge@outlook.co.jp","hoge@yahoo.co.jp"); //カンマ区切りで追加可能
//メールの件名を設定
var subject = [];
subject.push('【'+ b +'期日アラート】');
//もし当日納期で未完了だったらメール送信
if (formatDate == b && vl5 !== true) {
//gmail送信
GmailApp.sendEmail(arrayEmail,subject,
'・No:' + vl0 + '\n・タイトル:' + vl1 + '\n・発信者:' + vl2 + '\n・タスク内容:' + vl3 + '\n・納期:' + b +
'\n・シートURL:' + ss_url,
);
//OUTLOOK送信
MailApp.sendEmail(arrayoutlook,subject,
'・No:' + vl0 +
'\n・タイトル:' + vl1 +
'\n・発信者:' + vl2 +
'\n・タスク内容:' + vl3 +
'\n・納期:' + b +
'\n・シートURL:' + ss_url,
);
}
}
}
GASでアラートメールを作成するときのポイント3つ
GASでアラートメールを作成したのですが、コードの内容として自分でも覚えておきたい大事な箇所を3つ記します。
ポイント1. 日付のフォーマット化はifで囲む
日付をフォーマット化するのですが、めっちゃ前に書いた記事(Google apps scriptで日付を表示してみよう!)だと日付のフォーマット化は以下のように書いてました。
var formatDate = Utilities.formatDate(new Date(), "JST","yyMMdd");
だがしかし、日付が空白ではエラーとなってしまいます。(旧記事は書き直していません;)
なので以下の通りにifで条件分岐させて、該当したらUtilities.formatDateを充てています。
// 日付の値がなかったら
if (vl=4 != "") {
b = Utilities.formatDate(vl4,"JST","yyyy/MM/dd");
} else {
b = "";
}
ポイント2. 複数人に送信するには配列で指定する
GASでアラートメールを複数人に送信するときは、以下のような配列の形式で宛先を指定します。
//Gmailの複数宛先を設定
var arrayEmail = [];
arrayEmail.push('test1@gmail.com');
arrayEmail.push('test2@gmail.com'); //任意で追加
arrayEmail.push('test3@gmail.com'); //任意で追加
上記のような配列でアドレスを設定してあげることで、後でアドレス追加や削除など修正が楽ちんに。
だがしかし、GASで複数宛先・アドレスへメール送信を設定する際は注意点があります。
アドレスを配列格納するときの注意点
GASで複数宛先をpushメソッドで配列に格納しようとすると、なぜか「outlook」メールだけが配列に格納されません。
なので今回は以下のように無理やり記述。
//GOUTLOOKの複数宛先を設定(変数で格納せず、直接メアドを記入)
var arrayoutlook = ("hoge@outlook.co.jp","hoge@yahoo.co.jp");
この辺は忘れちゃうので、別記事に残しました。
参考GASでGmailやOUTLOOKの複数宛先へ送信する設定方法
-
【要注意】GASで複数の宛先へメール送信する際の設定方法
GASでGmailやOutlook等、複数の宛先へメール送信する際に配列格納でハマったのでメモ。 関連記事:GASでアラ ...
ポイント3. 完了したタスクは送信しない設定に
進捗が「完了」しているタスクについては、期日になっていても送信しない設定にしておくと親切です。
今回のコードだと以下のように設定してあります。
//もし納期が当日で進捗が未完了だったらメール送信
if (formatDate == b && vl5 !== true) {
MailApp.sendEmail();
}
納期が今日・なおかつ進捗がtrueでなかったら、メール送信する分岐です。
追記:トリガーで自動更新・通知にしておく
超大事なこと忘れてました。
GASは定刻にスクリプトを自動起動させる「トリガー」を設定することができるので、もれなく設定しましょう!
GASで定刻になったら自動でスクリプトを起動する設定方法
step
1 ツールからスクリプトエディタを選択
step
2 時計アイコンからトリガーを選択
step
3 トリガーを追加ボタンをクリック
step
4 トリガーを設定
- 自動で起動したいスクリプトを選択
- 「Head」のままでOK
- 「時間手動型」を選択。イベントの着火種類
- 「日付ベースのタイマー」を選択。1日n回の通知を選択可能。
- 「午前6時〜7時」を選択。
仕事の前に周知したいスクリプトなので、毎日6~7時頃にトリガーをセットしました。
まとめ
GASで期日になったらアラートメールを自動配信する方法について、紹介しました。
ポイントとしては、
- 日付をフォーマット化するときは空白がないこと
- 複数が宛先の場合は配列で指定するとメンテがラク
- 完了済みのタスクは送信しない設定にする
といった点に配慮すれば、5分くらいで同じ動作が行えるコード作成が完了すると思います。