見出し画像

Google Apps Script(GAS)を使ってスプレッドシートのセル1列のみ更新された際、メール通知される環境つくってみた

きっかけは、スマートフォンの管理をする中で、スマートフォンの利用状況を把握する為になるのですが、利用状況の確認でいちいちスプレッドシートにアクセスしにいくのが面倒・利用状況をリアルタイムで自動にて確認する環境を作りたくて、試してみました。

因みに、スマートフォンの管理は私ではなく別の部署が担当しており、私は貸与していたスマートフォンが返却された・在庫にあるスマートフォンを貸与したタイミングで、IT資産管理ツールのライセンスを割り当てる役割を担当しているのだが、スマートフォン管理担当である別の部署と情報共有の手段として使用しているのが、スプレッドシートのスマートフォン管理表になっているのでした。

まずは、メールで通知される内容は以下になります。

  • セル番地:更新(変更)されたセル番地の情報

  • 変更前の値 / 変更後の値は、そのままの意味

以下では、例として作成したスマートフォン管理表のスプレッドシートを元に、実現させたことを書いていきます。

スマートフォン管理表

上記スマートフォン管理表のE列(利用状況)の部分だけが更新(変更)された時に、メール通知する形にしました。
E列はプルダウンで「利用中」「未使用」を選択できるようにしてます。
理由は、入力形式とした場合、変更前の値 / 変更後の値にて「undefined」と表示されてメール通知されてしまう為。
※因みに、B列やC列が更新(変更)されても、メール通知されないようにしてます。

Google Apps Script(GAS)に記載したコードは以下。

function onChange(e) {

  //シート名で取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");

  //アクティブセルを取得
  var myCell = sheet.getActiveCell();

  //セルのアドレスを取得(セル番地の部分)
  var changed_cell = e.range.getA1Notation();

 // メール送信情報の定義
  const mail_to = '*****@icloud.com'; //メール通知先のアドレス
  const mail_subject = '【test】スマホステータスの更新通知';
  const mail_body = [];
  mail_body.push('スマホステータスが更新されました。')
  mail_body.push('セル番地: ' + changed_cell);
  mail_body.push('変更前の値: ' + e.oldValue);
  mail_body.push('変更後の値: ' + e.value);

//アクティブセルがE列かを判定、E列だった場合、メールを送信する
//E列以外が更新された場合は、無視する(メール通知しない)
//数字の「5」が、E列と判断してます。 数字を「4」にすると、D列を判断したりと、変更することが可能
if(myCell.getColumn()==5){
GmailApp.sendEmail(mail_to, mail_subject, mail_body.join('\n'));
  }
}

最後に、Google Apps Script(GAS)のトリガーを設定すれば起動します。

トリガー設定は、以下

メニューで「トリガー」を選ぶ


「エラー通知設定」は、任意で選択してみてください。

あとは、保存 をして実際に動くか、確認してみてください。
以上となります。ご参考までに

この記事が気に入ったらサポートをしてみませんか?