ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptで承認フロー!特定セル更新で通知メール

【Googleスプレッドシート】Apps Scriptで承認フロー!特定セル更新で通知メール
🛡️ 超解決

スプレッドシートで承認フローを管理していると、どのセルが更新されたかをいちいち確認するのが手間になります。特に、複数の担当者が同時に編集する場合、承認者の見落としが発生しやすくなります。この記事では、Apps Scriptを使って特定のセルが更新されたときに自動でメールを送信する方法を解説します。この仕組みを導入すると、承認漏れを防ぎ、業務のスピードを格段に向上させることができます。

【要点】Apps ScriptのonEditトリガーでセル更新を検知し、GmailApp.sendEmailで通知メールを自動送信します。

  • onEdit関数: スプレッドシートの編集を検知する組み込みトリガーで、変更されたセル範囲を取得します。
  • GmailApp.sendEmail: GmailのAPIを呼び出してメールを送信する関数です。件名や本文を動的に生成できます。
  • 条件分岐(if文): 対象シートやセル範囲を限定することで、特定の更新のみ通知します。

ADVERTISEMENT

Apps Scriptで承認フローを自動化する仕組み

Apps ScriptはGoogleスプレッドシートに組み込まれたJavaScriptベースの開発環境です。編集トリガー(onEdit)は、ユーザーがセルを変更するたびに自動で関数を実行します。この関数内で、どのセルが変更されたかを判定し、条件に合致する場合にメールを送信します。承認フローの典型的なパターンでは、特定の列(例:ステータス列)が「承認待ち」に更新されたときに、承認者に通知を飛ばすといった使い方をします。スクリプトはスプレッドシートに紐づいて保存され、権限を付与すれば他のユーザーも利用できます。

通知メールを送るスクリプトを作成する手順

  1. スクリプトエディタを開く
    スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
  2. onEdit関数を記述する
    デフォルトのコード.gsに以下のスクリプトを入力します。この関数は編集イベントオブジェクトeを受け取り、変更されたセル情報を取得します。

コード例(対象シート「承認シート」のA列が更新された場合にメール送信):

function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
if (sheet.getName() == "承認シート" && range.getColumn() == 1 && range.getRow() >= 2) {
var email = "approver@example.com";
var subject = "承認依頼: " + range.getValue();
var body = "セル " + range.getA1Notation() + " が更新されました。\n内容: " + range.getValue();
GmailApp.sendEmail(email, subject, body);
}
}
  1. スクリプトを保存する
    Ctrl+Sで保存し、プロジェクト名を「承認フロー通知」などに変更します。
  2. 初回承認と実行
    スプレッドシートに戻り、対象セルを編集します。初回だけ権限の承認画面が表示されるので、「許可」をクリックします。これで以降の編集で自動的にメールが送信されます。

スクリプトをカスタマイズするポイント

上記の基本コードは、シート名と列番号、行番号で条件を絞っています。承認フローでは、さらに複数の承認者や状態の変化を検知したい場合があります。そのためには、編集されたセルの値を評価したり、複数の条件を組み合わせたりする必要があります。以下に代表的なカスタマイズ例を紹介します。

複数の承認者に通知する

メールアドレスを配列で保持し、ループで送信します。ただし、GmailApp.sendEmailの呼び出し回数には1日100通の制限があるため、大量の場合は注意が必要です。

var recipients = ["approver1@example.com", "approver2@example.com"];
for (var i = 0; i < recipients.length; i++) {
GmailApp.sendEmail(recipients[i], subject, body);
}

特定の値に更新されたときだけ通知する

例えば、ステータス列が「承認待ち」に変わった場合のみメールを送るには、編集後の値をチェックします。

var newValue = range.getValue();
if (newValue == "承認待ち") {
// メール送信
}

変更前の値をログに記録する

編集前の値を取得するには、onEditでは直接取得できませんが、別途シートにバックアップを取るか、installed triggerとPropertiesServiceを利用します。簡単な方法としては、編集前の状態を別シートに保存しておき、トリガーで差分をチェックします。

ADVERTISEMENT

よくあるトラブルと対処法

メールが送信されない

原因として、スクリプトの権限が不足している、または送信制限(1日100通)に達していることが考えられます。スクリプトエディタで「実行」→「onEdit」を選んで手動実行し、ログにエラーが出ないか確認します。また、Gmailの送信制限はGoogle Workspaceアカウントの場合は異なるので、管理画面で確認してください。

トリガーが意図しないセルでも反応する

条件分岐が正しく書かれていない可能性があります。シート名、列番号、行番号を厳密に指定し、複数の条件を&&でつなげましょう。また、編集が複数セルに及ぶ場合(コピペなど)、e.rangeは選択範囲全体を返すため、範囲のチェックが必要です。

if (sheet.getName() == "承認シート" && range.getColumn() == 1 && range.getNumRows() == 1 && range.getNumColumns() == 1) {
// 単一セル更新のみ処理
}

承認者にメールが届かない

送信元がスプレッドシートの所有者であることに注意してください。メールの送信元はスクリプトを実行するユーザーになります。組織のポリシーで外部送信が制限されている場合は、承認者を同じドメインにするか、代替手段を検討します。

手動承認とスクリプト自動通知の比較

項目 手動承認 スクリプト自動通知
通知のタイミング 人が確認するたび、遅延が発生 セル更新と同時に即時通知
見落としリスク 高い 低い
初期設定の手間 不要 スクリプト作成と権限承認が必要
カスタマイズ性 低い 高い(トリガー条件や送信内容を自由に設定)

まとめ

この記事では、Apps ScriptのonEditトリガーとGmailApp.sendEmailを使って、特定セル更新時に自動で承認フローの通知メールを送る方法を解説しました。基本コードをコピーすればすぐに運用を始められます。さらに、複数の承認者への通知や状態変化による条件分岐などのカスタマイズを加えることで、より実践的なフローを構築できます。次は、承認結果をスプレッドシートに書き戻す処理や、送信エラー時の代替動作を追加してみると良いでしょう。スクリプトを改良して、あなたの業務に最適な承認自動化を実現してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。