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)」を呼び出すというものです。
また、関数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);
}
このプロシージャのおおまかな処理の流れは以下になります。
GASでは「指定した日時」「スプレッドシートを編集したとき」「フォームを投稿したとき」など、特定のイベントが発生したときに自動的にスクリプトを実行させるトリガーという機能があります。
トリガーには、「G Suite Developer Hub」という管理画面から設定する「インストーラブルトリガー」と、特定の関数名で作成する「シンプルトリガー」の2種類があります。インストーラブルトリガーでは、以下のようなイベントに応じたトリガーが設置可能です。
一方、シンプルトリガーでは、以下の5種類のトリガーを設置できます。
比較するとインストーラブルトリガーの方が設定できるトリガーのバリエーションが豊富です。シンプルトリガーは簡単に設置可能ですが、種類も少なく使用上の制約も多く設定されています。今回は、インストーラブルトリガーの「スプレッドシートから」→「編集時」のトリガーを設定する方針で進めていきます。
なお、このトリガーを使用する場合は、イベントの対象となるスプレッドシートのコンテナバインドスクリプトで作成する必要があるので、注意してください。
「数百のファイルを1つ1つ開くの面倒……」、複数のExcelデータを1箇所に集約するマクロ術
「計算式エラーで残業確定……」、GASで入力データのチェックツールを作成
プログラム自動実行で仕事を楽に! APIでSlackなどと連携できる「Google Apps Script」とはCopyright © ITmedia, Inc. All Rights Reserved.