ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【GAS】Googleドライブ・フォルダ内のすべてのCSVファイルを読み込む
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- 締切日に応じて3種類のリマインダーを送ることができます。
- GASって何?状態であっても設定できます。
なので、サクッとマスターして
と答えてあげてください。
動画はこちら
シートはこちら
*クリックすることでシートが開きます。(コピーしてお使いください)
スクリプト
/**
* 締切日に応じてメールを送信する
*/
function SendRemindMail() {
const SH_LIST = "会員リスト" //★リストのシート名
const SH_MTEMP = "メールテンプレ" //★メール文章のテンプレシート名
const LEVEL1 = 0 //10日前
const LEVEL2 = 1 //5日前
const LEVEL3 = 2 //当日
const FOOTTER = 5 //送信元メールアドレス&フッターの位置
const C_THRESHOLD = 0 //閾値
const C_SUBJECT = 1 //題名
const C_BODY = 2 //メール本文
//今日
let today = new Date()
today = Utilities.formatDate(today, 'Asia/Tokyo', 'M月d日');
//テンプレの読み込み
const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_MTEMP)
const vals = sh.getRange("A2:C7").getValues() //☆読み込む位置
const shlist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SH_LIST)
const lrow = shlist.getLastRow()
//リスト分のループ(1行ずつ処理する)
for (let i = 2; i <= lrow; i++) {
const linebuf = shlist.getRange(i, 1, 1, 7).getValues()
//完了 名前 メールアドレス コース名 申込日 締め切り 残り日数
// 0 1 2 3 4 5 6
if (linebuf[0][0] == false) {
let level = -1 //-1は見つからない場合用
let str_subject = ""
let str_body = ""
let zanday = linebuf[0][6] //残り日数
//残り日数
switch (zanday) {
case vals[LEVEL1][C_THRESHOLD]: //10日前
level = LEVEL1
break
case vals[LEVEL2][C_THRESHOLD]: //5日前
level = LEVEL2
break
case vals[LEVEL3][C_THRESHOLD]: //当日
level = LEVEL3
break
}
// switch (true) {
// case zanday > vals[LEVEL1][C_THRESHOLD]: //10日より前
// level = LEVEL1
// break
// case zanday > vals[LEVEL2][C_THRESHOLD]: //5日より前
// level = LEVEL2
// break
// case zanday == vals[LEVEL3][C_THRESHOLD]: //当日
// level = LEVEL3
// break
// }
if (level != -1) {
//締切日
let limit = new Date(linebuf[0][5])
limit = Utilities.formatDate(limit, 'Asia/Tokyo', 'M月d日');
//テンプレの格納
str_subject = vals[level][C_SUBJECT]
str_body = vals[level][C_BODY]
//題名の置換
str_subject = str_subject.replace("{name}", linebuf[0][1])
str_subject = str_subject.replace("{date}", zanday)
//本文の置換
str_body = str_body.replace("{name}", linebuf[0][1])
str_body = str_body.replace("{date}", zanday)
str_body = str_body.replace("{limit}", limit)
str_body = str_body.replace("{today}", today)
//確認用ログ出力
console.log(linebuf[0][2]) //メールアドレス
console.log(str_subject)
console.log(str_body)
console.log(vals[FOOTTER][C_BODY])
console.log(vals[FOOTTER][1] + vals[FOOTTER][0])
// メールを送信
// let send = GmailApp.sendEmail(
// linebuf[0][2], //メールアドレス
// str_subject,
// str_body + vals[FOOTTER][C_BODY],
// {
// from: vals[FOOTTER][0],
// name: vals[FOOTTER][1]
// }
// )
}
}
}
}
ポイント
締切日に応じて3種類のメール文章を作成できます。
実行前に「会員リスト」の締切日を変更して3種類のメッセージが作成されることを確認します。
残り日数を複数指定する場合
例)
case を複数並べます。(breakするまで通ります)
//残り日数
switch (zanday) {
// case vals[LEVEL1][C_THRESHOLD]: //10日前
case 10: //10日前
case 9: //10日前
case 8: //10日前
level = LEVEL1
break
}
やや邪道ですが、switch(true)にすることで期間を指定することもできます。
switch (true) {
case zanday > 5 ://5日前まで
level = LEVEL1
break
case zanday > 2: //2日前まで
level = LEVEL2
break
}
その後、メール配信してみるといいでしょう。
さらにトリガーをセットすることで、「1日1回、リマインダーを送信」
といった使い方ができます。
最後までご覧いただきありがとうございます。
つぎはこちら
【GAS】半角文字列を全角文字列に変換する方法(ExcelのJIS関数) (Gスプレッドシート)
コピペで半角文字列を全角文字列に変換できる関数が作れます。
コメント
いつも記事を拝見させていただいています。とても勉強になります。
こちらの記事を応用してリマインダーを送るシートを作成したのですがエラーが出てしまいます。ご教授いただけませんでしょうか。
えーっとまず、上記スクリプトでやってエラーが出るのでしょうか?
全く同じ(会員リスト と メールテンプレ というシート名)にしてやってみてください。