広告

【即戦力】GASでアラートメールを作成して期日になったら自動通知

2020年12月17日

GASで期日になったら自動でアラートメールを周知するスクリプトを共有します。

すぐにコードを見る↓

use-image
納期がきたら...

mail-image
複数人にアラートメールを送信したメールイメージ

特に1つのシートでタスク進捗を共有・管理している場合、複数人に同じアラートを送信できるようにしておくと何かと便利です。

GASでアラートメールを作成して期日をお知らせするコード

スプシの期日でアラートメール運用イメージ

運用のイメージは、冒頭画像のシートイメージです。

use-image
テーブルの期日を表示した

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-fukusuu-mail
【要注意】GASで複数の宛先へメール送信する際の設定方法

GASでGmailやOutlook等、複数の宛先へメール送信する際に配列格納でハマったのでメモ。 関連記事:GASでアラ ...

ポイント3. 完了したタスクは送信しない設定に

進捗が「完了」しているタスクについては、期日になっていても送信しない設定にしておくと親切です。

今回のコードだと以下のように設定してあります。

//もし納期が当日で進捗が未完了だったらメール送信
if (formatDate == b && vl5 !== true) {
 MailApp.sendEmail();
}

納期が今日・なおかつ進捗がtrueでなかったら、メール送信する分岐です。

OYAKUN
OYAKUN
運用側はチェックするだけでOKなので、地味に便利っすよ。

追記:トリガーで自動更新・通知にしておく

超大事なこと忘れてました

GASは定刻にスクリプトを自動起動させる「トリガー」を設定することができるので、もれなく設定しましょう!

OYAKUN
OYAKUN
この記事は自動通知のタイトルなので、トリガーを設定しますw

GASで定刻になったら自動でスクリプトを起動する設定方法

step
1
ツールからスクリプトエディタを選択

script-choice
スクリプトエディタを選択する

step
2
時計アイコンからトリガーを選択

triger-choice
トリガーを選択する

step
3
トリガーを追加ボタンをクリック

triger-btn
トリガーを追加して設定する

step
4
トリガーを設定

toriger-setting
通知アラートのトリガーを設定を保存

  1. 自動で起動したいスクリプトを選択
  2. 「Head」のままでOK
  3. 「時間手動型」を選択。イベントの着火種類
  4. 「日付ベースのタイマー」を選択。1日n回の通知を選択可能。
  5. 「午前6時〜7時」を選択。

仕事の前に周知したいスクリプトなので、毎日6~7時頃にトリガーをセットしました。

OYAKUN
OYAKUN
これでシートにタスクが追記になっても、勝手にスクリプトが通知を送ってくれるようになりやす。

まとめ

GASで期日になったらアラートメールを自動配信する方法について、紹介しました。

ポイントとしては、

  1. 日付をフォーマット化するときは空白がないこと
  2. 複数が宛先の場合は配列で指定するとメンテがラク
  3. 完了済みのタスクは送信しない設定にする

といった点に配慮すれば、5分くらいで同じ動作が行えるコード作成が完了すると思います。

OYAKUN
OYAKUN
くれぐれもトリガーの設定漏れにはお気をつけください!