「業務の改善」または、「業務の効率化」を目指している方、こんにちは。
今回は、「Google Apps Script(GAS)」を使った業務の改善・効率化の事例紹介の第二弾です。
弊社は、協同組合様や運送事業者様向けにETCカードの管理・請求書・走行明細書発行システム「ETCクラウド」を提供していますが、システムだけでなく、運用業務のアウトソーシング(事務代行)もお受けしております。
そのアウトソーシングでお受けしている運用業務の効率化、ミス削減のために行っている事例をご紹介させていただければと思います。
前回は、「定期タスクのリマインダーメールを送る」方法をご紹介しましたが、今回は、 「Google Apps Script(GAS)」 と「Googleスプレッドシート」の連携による「業務の改善・効率化」の事例をご紹介します。

Googleスプレッドシートは、クラウド上で利用できるエクセルのGoogle版みたいなものですね。
Googleスプレッドシートを業務管理、タスク管理に利用している方は多いかと思いますが、弊社では、「Google Apps Script(GAS)」 を使って、管理している業務やタスクの期日(納期)になるとアラートメールが送信されるスクリプトを利用しています。
内容としては、「Googleスプレッドシートに記載されているタスクの納期が当日で、状況が完了になっていなければ、タスクの内容をメーリングリストへメール送信する」というものです。
Googleスプレッドシートの内容は以下のようなイメージです。

「Google Apps Script(GAS)」 に記述するスクリプトは以下です。
function mail() {
//シートを取得
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh = bk.getActiveSheet();
var last_row = sh.getLastRow(); //最後の行を取得(繰り返し処理の回数)
var begin_row = 2; // 処理を開始する行 (1行目は項目名なので2から)
//今日の日付を取得し文字列を成型する
var today = new Date();
var formatDate = Utilities.formatDate(today, "JST","yyyy/MM/dd");
//送信があったかどうかフラグ
let flg = "N";
//繰り返し処理(1行づつ処理し、行の数だけ繰り返す)
for(var i = begin_row; i <= last_row; i++) {
//それぞれのセルの中身を取得していく
//納期(日付は成型する)
var sell1 = "A"+i;
var value1 = sh.getRange(sell1).getValue();
var value1 = Utilities.formatDate(value1, "JST","yyyy/MM/dd");
//状況
var sell2 = "B"+i;
var value2 = sh.getRange(sell2).getValue();
//依頼者
var sell3 = "C"+i;
var value3 = sh.getRange(sell3).getValue();
//依頼タイトル
var sell5 = "D"+i;
var value5 = sh.getRange(sell5).getValue();
//依頼内容
var sell6 = "E"+i;
var value6 = sh.getRange(sell6).getValue();
//今日の日付と納期が同じで、なおかつ状況が完了でない場合メールを送る
if(formatDate == value1 && value2 !== "完了"){
GmailApp.sendEmail('●●●宛先メールアドレス●●●',
'【●●●メールタイトル●●●】' + value5,
'■依頼者:' + value3 + '\n\n■依頼内容:'+ value6 + '\n\n■状況:'+ value2 + '\n■納期:'+ value1);
Logger.log("送信内容は、" + "\n・納期=" + value1 + "\n・状況=" + value2 + "\n・依頼者=" + value3 + "\n・依頼タイトル=" + value5 + "\n・依頼内容=" + value6 + "\nでした。" );
flg = "Y";
}
}
if(flg == "N"){
Logger.log("メール送信はありませんでした");
}
}
function isBusinessDay(date){
if (date.getDay() == 0 || date.getDay() == 6) {
Logger.log("本日は、土日祝です");
return false;
}
const calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
if(calJa.getEventsForDay(date).length > 0){
Logger.log("本日は、土日祝です");
return false;
}
Logger.log("本日は、営業日です");
return true;
}
function setTrigger(){
delTrigger();
var setTime = new Date();
setTime.setHours(9);
setTime.setMinutes(30);
Logger.log("営業日であれば、9:30にmailを実行するように設定しました");
if (isBusinessDay(setTime)){
ScriptApp.newTrigger('mail').timeBased().at(setTime).create();
}
}
function delTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "mail") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
スクリプトの作り方は、以下参考です。
【GAS】Googleスプレッドシートから期日アラートメールを送る方法 (魚拓)
メール送信のタイミングですが、トリガーの設定によって、業務が始まる朝に配信されるようにしています。必要に応じて、午前の業務終了前、午後一番などメール送信のタイミング別のスプレッドシートも用意して、社内で共有しています。
前回ご紹介した「定期タスクのリマインダーメールを送る」方法で送られるメールはメール文面が固定でしたが、今回は「Googleスプレッドシートに記載されているタスクの内容、担当者、状況、納期」がメールの文面に入るようになっていますので、より汎用的な使い方ができるかと思います。
このスクリプトによって、Googleスプレッドシートでの業務管理での期日(納期)に対する漏れ、抜けがなくなり、管理者がいなくても自動的にメールが送られてくるため、スケジュール的に先の業務でもスプレッドシートに書いておけば、期日前に通知があるので覚えておくという負荷もなくなります。
メールを常時確認する環境であれば、作業漏れ・作業効率化対策の1つになるかと思います。参考になれば幸いです。