Google Apps Script(GAS)を使用して、特定のセルが変更されたときにトリガー処理を実行する方法を紹介します。
この記事では、スプレッドシートの在庫管理を例に、トリガーの設定方法と実装手順を解説します。
注意点:onEdit関数の制限
onEdit
関数を直接使用する場合、Gmailの送信などの高度な権限を必要とする操作は、Google Apps Scriptのセキュリティ制限により実行できません。
そのため、この記事ではonEdit
関数ではなく、トリガー設定でonEditトリガー(スプレッドシート編集時をトリガーとする設定)を使用して、別の関数を呼び出す方法を採用しています。
onEdit関数を使って、特定セルが変更されたときに自動でスクリプトを実行する方法を知りたい方はこちらをご覧ください!
スプレッドシートの準備
まずは、操作するスプレッドシートを準備します。
1. Google スプレッドシートを開く
GoogleドライブやGoogleアプリ一覧から、編集したいGoogleスプレッドシートを開きます。
既存のスプレッドシートを使用しない場合は、空白のスプレッドシートを新規作成します。
2. スプレッドシートにデータを入力する
Googleスプレッドシートに必要なデータを入力します。
本記事では、サンプルとして下記のデータを使用します。
サンプルデータ
下記のデータをスプレッドシートのA1:E6の範囲に入力します。
商品名 | 在庫数 | 価格 | 売上数 | 状態 |
---|---|---|---|---|
ノートPC | 61 | 11265 | 7 | |
スマートフォン | 24 | 21850 | 2 | |
タブレット | 81 | 42194 | 1 | |
モニター | 70 | 26962 | 11 | |
プリンター | 30 | 49131 | 5 |
Google Apps Scriptの作成
次に、スプレッドシートが編集されたときに実行される関数を実装していきます。
スプレッドシートのデータの「在庫数」が10以下になった場合、スプレッドシートに在庫状態のアラートを入力し、Gmailでの通知を送信します。
1. GASのスクリプトエディタを開く
準備したスプレッドシートの、メニューバーの「拡張機能」を左クリックし、「Apps Script」を選択します。
「Apps Script」を選択すると、スクリプトエディタが新しいタブで開きます。
既に記述されているfunction myFunction(){}
は削除します。
2. スクリプトを作成する(サンプルコード)
新しいスクリプトファイルに、以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。
function checkInventory(e) {
// スプレッドシートを取得
var sheet = e.source.getActiveSheet();
// 編集されたセルの列と値を取得
var editedColumn = e.range.getColumn();
var newValue = e.value;
// 特定の列(例:在庫数)が変更された場合に処理を実行
if (editedColumn === 2) { // 在庫数の列
// 在庫数が10以下になった場合に通知
if (parseInt(newValue) <= 10) {
sendLowStockAlert(sheet, e.range.getRow(), newValue);
}
}
}
function sendLowStockAlert(sheet, row, newStockValue) {
// 商品名を取得
var productName = sheet.getRange(row, 1).getValue();
// Gmailで通知を送信
var recipient = "your-email@example.com";
var subject = "在庫不足アラート: " + productName;
var body = productName + "の在庫が" + newStockValue + "個になりました。補充が必要です。";
GmailApp.sendEmail(recipient, subject, body);
// スプレッドシートにも警告を追加
sheet.getRange(row, 5).setValue("在庫不足");
sheet.getRange(row, 5).setBackground("yellow");
}
function createEditTrigger() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('checkInventory')
.forSpreadsheet(ss)
.onEdit()
.create();
}
スクリプトの説明
このスクリプトは、スプレッドシートのデータの「在庫数」が10以下の場合に、スプレッドシートに在庫状態のアラートを入力し、Gmailでの通知を送信する仕組みになっています。
checkInventory 関数
function checkInventory(e) {
var sheet = e.source.getActiveSheet();
var editedColumn = e.range.getColumn();
var newValue = e.value;
function checkInventory(e)
:
編集イベントが発生したときに呼び出される関数です。トリガー設定は後ほど行います。e
は編集イベントのオブジェクトです。
var sheet = e.source.getActiveSheet()
: 編集されたシートを取得します。
var editedColumn = e.range.getColumn()
: 編集されたセルの列番号を取得します。
var newValue = e.value
: 編集後の新しい値を取得します。
次に、条件分岐で、編集されたセルが在庫数の列であり、その値が10以下の場合に処理を実行します。
if (editedColumn === 2) {
if (parseInt(newValue) <= 10) {
sendLowStockAlert(sheet, e.range.getRow(), newValue);
}
}
}
if (editedColumn === 2)
: 編集された列が2列目(在庫数の列)かどうかをチェックします。
if (parseInt(newValue) <= 10)
: 新しい値を整数に変換し、10以下かどうかをチェックします。
sendLowStockAlert(sheet, e.range.getRow(), newValue)
: 条件を満たす場合、
関数を呼び出します。sendLowStockAlert
sendLowStockAlert 関数
まず、商品の在庫が一定量以下になったことを通知するため、Gmailで在庫不足のアラートメールを送信します。
function sendLowStockAlert(sheet, row, newStockValue) {
var productName = sheet.getRange(row, 1).getValue();
var recipient = "your-email@example.com";
var subject = "在庫不足アラート: " + productName;
var body = productName + "の在庫が" + newStockValue + "個になりました。補充が必要です。";
GmailApp.sendEmail(recipient, subject, body);
var productName = sheet.getRange(row, 1).getValue()
: 該当行の1列目(商品名)の値を取得します。
GmailApp.sendEmail(recipient, subject, body)
: メール送信に必要な情報(宛先、件名、本文)を設定し、メールを送信します。
サンプルコードでは、recipient
に “your-email@example.com”が入っているため、ご自分のメールアドレスに変更してください。
次に、在庫不足の商品に対して、状態列に「在庫不足」と表示し、背景色を黄色に変更します。
sheet.getRange(row, 5).setValue("在庫不足");
sheet.getRange(row, 5).setBackground("yellow");
}
sheet.getRange(row, 5).setValue("在庫不足")
: 5列目(状態)に「在庫不足」と入力します。
sheet.getRange(row, 5).setBackground("yellow")
: 5列目のセルの背景色を黄色に設定します。
sheet.getRange(row, 5).setFontColor("red");
を追加することで、指定したセルの文字色を設定することもできます。
色の指定には、
・色名(”yellow”, “red”, “blue”など)を直接使用できます。
・HEX値(”#FFFF00″など)を使用することもできます。
createEditTrigger 関数
function createEditTrigger() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger('checkInventory')
.forSpreadsheet(ss)
.onEdit()
.create();
}
function createEditTrigger()
:
この関数では、checkInventory
関数のトリガーを設定します。
現在のスプレッドシートに対して、編集時にcheckInventory
関数を実行するトリガーを作成します。
トリガー設定は
関数を使用せず、手動で設定することもできます。createEditTrigger
トリガーの設定
編集時にcheckInventory
関数を実行するトリガーの設定をします。
トリガー設定は、
関数を使用する方法と、手動で設定する方法があります。createEditTrigger
方法1: createEditTrigger 関数を実行する
1. スクリプトを実行する
スクリプトエディターのメニューバーで「createEditTrigger」が選択し、「実行」ボタンを左クリックします。
初めて実行する際には、スクリプトに対する権限の承認が求められる場合がありますので、アカウントを選択して、承認してください。
「このアプリは Google で確認されていません」と表示された場合は左下の詳細をクリックすると、「無題のプロジェクト(安全ではないページ)に移動」というリンクが表示されます。
このリンクをクリックすると次のページへ遷移できます。
2. トリガー設定を確認する
スプレッドシートの編集時にcheckInventory
関数を実行するトリガーが作成されていることを確認します。
Google Apps Scriptエディタの左側のメニューから「トリガー」を選択します。
「トリガー」の設定画面を開くと、
- イベント:スプレッドシートから – 編集時
- 関数:checkInventory
というトリガーが追加されていることが確認できます。
方法2: トリガー設定から手動で設定する
1. トリガーの設定画面を開く
Google Apps Scriptエディタの左側のメニューから「トリガー」を選択します。
2. トリガーを追加する
トリガーの設定画面が開いたら、右下の「トリガーを追加」ボタンをクリックします。
「トリガーを追加」ダイアログが表示されたら、以下の設定を行います。
- 実行する関数を選択:
checkInventory
- 実行するデプロイを選択: 「Head」
- イベントのソースを選択: 「スプレッドシートから」
- イベントの種類を選択: 「編集時」
必要に応じて、他のオプション(エラー通知の設定)も設定します。
設定できたら、「保存」をクリックしてトリガーを作成します。
初めて保存する際には、スクリプトに対する権限の承認が求められる場合がありますので、アカウントを選択して、承認してください。
「このアプリは Google で確認されていません」と表示された場合は左下の詳細をクリックすると、「無題のプロジェクト(安全ではないページ)に移動」というリンクが表示されます。
このリンクをクリックすると次のページへ遷移できます。
3. トリガー設定を確認する
「トリガー」の設定画面を開くと、
- イベント:スプレッドシートから – 編集時
- 関数:checkInventory
というトリガーが追加されていることが確認できます。
スクリプトの実行と実行結果
最後に、スプレッドシートを編集して、スクリプトが正しく実行されることを確認します。
1.スプレッドシートの特定セルを変更する
スプレッドシートの在庫数の列で、特定のセルの値を10以下に変更します。
サンプル画像では、セルB4の値を「9」に変更しています。
2.実行結果を確認する
スクリプトが正常に実行されると、5列目のセルに状態が入力されます。
サンプルでは、セルE4に黄色の背景色で、「在庫不足」と入力されます。
また、スクリプトが正常に実行されると、スクリプトに入力したメールアドレス宛にアラートメールが届いていることが確認できます。
まとめ
Google Apps Scriptでトリガー設定を使用することで、簡単にスプレッドシートの編集を監視し、特定の条件下で自動的に処理を実行できます。
トリガーを使用することで、onEdit
関数の制限を回避しつつ、条件を満たした場合に自動的にGmailの通知を送信できます。
ぜひ、ご自分の作業に合わせてカスタマイズしてみてください!
onEdit関数を使って、特定セルが変更されたときに自動でスクリプトを実行する方法を知りたい方はこちらをご覧ください!
DXを推進するためのその他の効果的なサービスやツールについて知りたい方は、こちらの記事もご覧ください!
コメント