「仕事完了! でも報告メールは面倒くさい」――GASで実現する報告メール自動化術:働く価値を上げる“VBA/GAS”術(14)(2/3 ページ)
作業終了後の報告メールは面倒くさい。その報告メールを自動化できたら時間に余裕ができるかもしれません。今回は、GASでToDoを完了してリストを変更したら、自動でメールが送信される仕組みを作っていきます。
ToDo完了メール送信スクリプト
ToDoシートのステータスを「完了」に切り替えた際に動作する関数「onChangeStatus(e)」を以下に記載します。
function onChangeStatus(e){ var cell = e.range; var status = e.value; var sheet = cell.getSheet(); var column = cell.getColumn(); var row = cell.getRow(); var lastRow = sheet.getLastRow(); if(column === 5 && row >= 2 && row <= lastRow && status === '完了'){ sendEmail(row); } }
このスクリプトは、GASで用意されている「トリガー」という仕組みを使って、セルが編集されたときに自動で動作するように設定しています。
スクリプトの動作は、以下の条件が全て成立したときに、別の関数「sendEmail(row)」を呼び出すというものです。
- 変更されたセルの列数が5と等しい
- 変更されたセルの行数が2以上であり、データのある最終行数以下である
- 変更後のセルの値が「完了」である
また、関数onChangeStatus(e)から呼び出される関数sendEmail(row)を以下に記載します。
function sendEmail(row){ var FIELDS = { no: 0, task: 2, status: 4 } var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var index = row - 1; var myNo = values[index][FIELDS.no]; var task = values[index][FIELDS.task]; var recipient = 'example@example.com'; var recipientName = '皆様'; var subject = ''; subject += 'タスク完了メール: [' + myNo + '] '; subject += task; var body = ''; body += recipientName + '\n'; body += '以下のタスクが完了しました\n'; body += '[' + myNo + '] ' + task; GmailApp.sendEmail(recipient, subject, body); }
このプロシージャのおおまかな処理の流れは以下になります。
- 列指定用のオブジェクト「FIELDS」の定義
- アクティブシートのデータ全体を二次元配列に格納し、No.とタスクを取り出す
- メールの送信先アドレス、件名、本文を文字列として生成
- メールの作成および送信
イベントとトリガー
GASでは「指定した日時」「スプレッドシートを編集したとき」「フォームを投稿したとき」など、特定のイベントが発生したときに自動的にスクリプトを実行させるトリガーという機能があります。
トリガーには、「G Suite Developer Hub」という管理画面から設定する「インストーラブルトリガー」と、特定の関数名で作成する「シンプルトリガー」の2種類があります。インストーラブルトリガーでは、以下のようなイベントに応じたトリガーが設置可能です。
- スプレッドシートから
- 起動時
- 編集時
- 変更時
- フォーム送信時
- 時間主導型
- 特定の日時
- 分ベースのタイマー
- 時間ベースのタイマー
- 日付ベースのタイマー
- 週ベースのタイマー
- 月ベースのタイマー
- カレンダーから
- カレンダー更新済み
一方、シンプルトリガーでは、以下の5種類のトリガーを設置できます。
- 起動時(onOpen)
- 編集時(onEdit)
- インストール時(onInstall)
- WebアプリケーションへのGETリクエスト(doGet)
- WebアプリケーションへのPOSTリクエスト(doPost)
比較するとインストーラブルトリガーの方が設定できるトリガーのバリエーションが豊富です。シンプルトリガーは簡単に設置可能ですが、種類も少なく使用上の制約も多く設定されています。今回は、インストーラブルトリガーの「スプレッドシートから」→「編集時」のトリガーを設定する方針で進めていきます。
なお、このトリガーを使用する場合は、イベントの対象となるスプレッドシートのコンテナバインドスクリプトで作成する必要があるので、注意してください。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「数百のファイルを1つ1つ開くの面倒……」、複数のExcelデータを1箇所に集約するマクロ術
経費精算書のように「バラバラのデータを1箇所に集約すること」は、多く発生する業務の1つです。しかし、1つ1つのファイルを開きコピー&ペーストするのは手間が掛かる業務。その業務を、マクロを使って自動化する方法を紹介します。 - 「計算式エラーで残業確定……」、GASで入力データのチェックツールを作成
1つのGoogleスプレッドシートを複数人で共同編集するとき、想定していた形式とは違うデータを入力されると、不備が発生してしまう場合があります。そのような問題を、GASで解決するにはどうすればいいのでしょうか。 - プログラム自動実行で仕事を楽に! APIでSlackなどと連携できる「Google Apps Script」とは
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、Googleが提供する数々のアプリケーションを操作できる「Google Apps Script」を紹介する。※ショートカットキーの解説あり