筆者の草野(@lesslabo)です。
会社でお客様からの問い合わせの管理をしているのですが、管理表から今日の問い合わせ分をコピー→メールにペースト→メール送信というフローを毎日することに疲れてしまったので、GoogleAppsScript(GAS)で自動化する仕組みを組んでみました。
TODOで期日管理をメールで送信するなどの例はよく見かけたのですが、テーブルの内容をまとめて送るというニーズがありそうでなさそうな仕組みがなかったので公開用にスクリプト組んでみました。
GAS初心者なので、初心者の方にもわかりやすいように変数を組んでいるので、少し重たい変数名称になっていますが気にしないでください・・・
今回の利用シーン
Before
お客様からの問い合わせをExcelの表で管理して、毎日メールにExcelを添付して関係者に送信していました。問題点としては、毎回内容を確認するのにExcelを開かないといけない。後でお客様の問い合わせを確認しにくい。などの問題がありました。
After
管理表をGoogle Spread Sheetに移行して記入を始めました。記入するだけで、あとは自動なので何もすることは無くなりました。また、メール送信時に記入した内容も転記するようにしたので、後で見返すときに便利になりました。
今回適用する表とコードの紹介
今回適用する表は以下の表です。必要なのは、「H列」の配信済FLGだけあれば、同じような表を作成すればどのような形でも大丈夫だと思います。
早速GASのコードです。
function TaskMailNotice() {
//シートを取得
var acs = SpreadsheetApp.getActiveSpreadsheet();
var SS = acs.getActiveSheet(); //現在のアクティブシートを取得
var Last_Row = SS.getLastRow(); //アクティブシートから最後の行を取得
var First_Row = 4; // 処理を開始する行を記載(本文から処理開始する)
var Mail_Body = ""; //メール本文の初期化
//日付処理(当日日付取得,「2021/09/12」の日付部分)
var T_Date = new Date();
var Today_Date_Value = Utilities.formatDate( T_Date, 'Asia/Tokyo', 'yyyy/MM/dd');
//ループ処理(1行毎に確認し、メール本文に追加する)
for(var i = First_Row; i <= Last_Row; i++) {
//当該行がメール配信済かを確認する
var H_FLG = "H"+i; //配信済FLGがずれたらこの行番号をずらす
var H_FLG_Value = SS.getRange(H_FLG).getValue();
//以下は「配信済FLG」がブランクの場合に処理開始する
if(H_FLG_Value != "配信済"){
//それぞれのセルの中身を取得していく
//NO
var NO_Row = "A"+i;
var NO_Row_Value = SS.getRange(NO_Row).getValue();
//管理項目
var Kanri_Row = "B"+i;
var Kanri_Row_Value = SS.getRange(Kanri_Row).getValue();
//日付
var Hiduke_Row = "C"+i;
var Hiduke_Row_Value = SS.getRange(Hiduke_Row).getValue();
var HidukeHenkan_Row_Value = Utilities.formatDate( Hiduke_Row_Value, 'Asia/Tokyo', 'yyyy/MM/dd'); //日付をYYYY/MM/dd形式に変換
//顧客リクエスト
var Kokyaku_Row = "D"+i;
var Kokyaku_Row_Value = SS.getRange(Kokyaku_Row).getValue();
//対応者
var Tanto_Row = "E"+i;
var Tanto_Row_Value = SS.getRange(Tanto_Row).getValue();
//当社対応
var Taiou_Row = "F"+i;
var Taiou_Row_Value = SS.getRange(Taiou_Row).getValue();
//期日
var Kizitsu_Row = "G"+i;
var Kizitsu_Row_Value = SS.getRange(Kizitsu_Row).getDisplayValue(); //ここだけ入力した通りに表示させる
}
//配信済FLGに記載が無い行があった場合メールを送る
if(H_FLG_Value !== "配信済"){
Mail_Body = Mail_Body
+ "\n --------------------- \n"
+ "■NO:" + NO_Row_Value + " (問合日:" + HidukeHenkan_Row_Value + ")"
+ "●管理項目:" + Kanri_Row_Value + "\n\n"
+ "●顧客リクエスト:" + Kokyaku_Row_Value + "\n"
+ "●対応者:" + Tanto_Row_Value + "\n"
+ "☆当社対応:" + Taiou_Row_Value + "\n\n"
+ "☆期日: " + Kizitsu_Row_Value + "\n\n"
+ "\n --------------------- \n" ;
}
//メール配信FLGが未処理の場合配信済みにする
if(H_FLG_Value == ""){
SS.getRange("H" + i).setValue("配信済") //配信済FLGの位置がずれた場合ここもずらす
}
}
//管理表に何も変更が無かった場合は、その旨をメールで報告する
if(Mail_Body == ""){
Mail_Body = "\n\n ☆本日の受付はありませんでした。よかった!☆ \n ";
}
//メール送信用変数をセット
var Mail_To = "XXXX@xx.com"; //宛先を追加する場合はカンマで区切る
var subject = "●●株式会社管理表アップデート一覧(" + Today_Date_Value + "送信)"; // 件名
//メール本文
var body = `皆様`
+ "\n\n"
+ "\n 本日受付したお客様のお問い合わせ内容をお知らせいたします。"
+ Mail_Body
+ "\n 今までの問い合わせについては以下からご確認ください \n\n"
+ "URL:共有アドレスを記載する"
+ Last_Row //PCで開いたときに最終行を開く(スマホでは最終行は仕様で開けない)
var options = {
name:"●●株式会社お問い合わせ内容メール"
};
GmailApp.sendEmail(Mail_To,subject,body,options);
}
GAS利用時の注意事項
このスクリプトを初めて動かく場合には、以下の注意事項が発生します。ご存じの方も多いと思うので、初めての方だけ気にされてください。基本的には、「OK」や「許可」で進めていただいて大丈夫です。
スプレッドシートへのアクセス権限
時間を設定して毎日送信する方法
スクリプト作成画面の左に「時計」マークがあるので、「トリガー」をクリックして、トリガーを設定します。
今回は、「日付主導型」で「時刻を選択」して「午後8時~9時」の間に送信するようにしました。
まとめ
GASを利用すると毎日の同じタスクについては効率化できるのがわかりました。今後の課題としては、現在のレイアウトだと顧客対応後のアップデートの通知が来ないので、それを組み込む必要がある場合はスクリプトのアップデートが必要になります。(現時点では自社では必要がないのでアップデートしない予定です)
最後までお読みいただきありがとうございました。
コメント