PR

【GAS】特定セル変更時に自動で処理を実行!onEdit関数活用法

GAS
記事内に広告が含まれています。

Google Apps Script(GAS)を使って、Googleスプレッドシートの特定セルが変更されたときに自動で処理を実行する方法をご紹介します。

今回は、onEdit関数を活用して、スプレッドシートの処理自動化を実現する手順を詳しく解説します。

スプレッドシートの準備

まずは、操作するスプレッドシートを準備します。

1. Google スプレッドシートを開く

GoogleドライブやGoogleアプリ一覧から、編集したいGoogleスプレッドシートを開きます。

既存のスプレッドシートを使用しない場合は、空白のスプレッドシートを新規作成します。

スプレッドシートを開く

2. スプレッドシートにデータを入力する

Googleスプレッドシートに必要なデータを入力します。

本記事では、サンプルとして下記のデータを使用します。

サンプルデータ

下記のデータをスプレッドシートのA1:E6の範囲に入力します。

商品名在庫数価格売上数状態
ノートPC61112657
スマートフォン24218502
タブレット81421941
モニター702696211
プリンター30491315

onEdit関数を使用したスクリプトの作成

次に、特定のセルが変更されたことを検知し、条件を満たした場合にスプレッドシートに在庫状態のアラートを入力するスクリプトを作成します。

1. GASのスクリプトエディタを開く

準備したスプレッドシートの、メニューバーの「拡張機能」を左クリックし、「Apps Script」を選択します。

スプレッドシートの「Apps Script」を左クリックする


「Apps Script」を選択すると、スクリプトエディタが新しいタブで開きます。

既に記述されているfunction myFunction(){}は削除します。

GASエディタからmyFunction()を削除

2. スクリプトを作成する(サンプルコード)

新しいスクリプトファイルに、以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var editedColumn = e.range.getColumn();
  var newValue = e.value;
  
  if (editedColumn === 2) { // 在庫数の列
    if (parseInt(newValue) <= 10) {
      markLowStock(sheet, e.range.getRow());
    }
  }
}

function markLowStock(sheet, row) {
  var productName = sheet.getRange(row, 1).getValue();
  sheet.getRange(row, 5).setValue("在庫不足");
  sheet.getRange(row, 5).setBackground("yellow");
  
  // ログに記録
  console.log(productName + "の在庫が不足しています。");
}
サンプルスクリプトをコピーして貼り付け、プロジェクトを保存

スクリプトの説明

このスクリプトは、スプレッドシート内で特定のセル(例:在庫数)が変更された際に、その値が一定以下になると自動で状態入力を行う仕組みになっています。

onEdit関数

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var editedColumn = e.range.getColumn();
  var newValue = e.value;

function onEdit(e):
スプレッドシートが編集されるたびに自動的に呼び出される関数です。
eは編集イベントのオブジェクトです。

var sheet = e.source.getActiveSheet(): 編集されたシートを取得します。

var editedColumn = e.range.getColumn(): 編集されたセルの列番号を取得します。

var newValue = e.value: 編集後の新しい値を取得します。

次に、条件分岐で、編集されたセルが在庫数の列であり、その値が10以下の場合に処理を実行します。

  if (editedColumn === 2) { // 在庫数の列
    if (parseInt(newValue) <= 10) {
      markLowStock(sheet, e.range.getRow());
    }
  }
}

if (editedColumn === 2): 編集された列が2列目(在庫数の列)かどうかをチェックします。

if (parseInt(newValue) <= 10): 新しい値を整数に変換し、10以下かどうかをチェックします。

markLowStock(sheet, e.range.getRow()): 条件を満たす場合、markLowStock関数を呼び出します。

markLowStock関数

markLowStock関数では、在庫不足の商品に対して、状態列に「在庫不足」と表示し、背景色を黄色に変更します。

function markLowStock(sheet, row) {
  var productName = sheet.getRange(row, 1).getValue();
  sheet.getRange(row, 5).setValue("在庫不足");
  sheet.getRange(row, 5).setBackground("yellow");

var productName = sheet.getRange(row, 1).getValue(): 該当行の1列目(商品名)の値を取得します。

sheet.getRange(row, 5).setValue("在庫不足"): 5列目(状態)に「在庫不足」と入力します。

sheet.getRange(row, 5).setBackground("yellow"): 5列目のセルの背景色を黄色に設定します。

sheet.getRange(row, 5).setFontColor("red");
を追加することで、指定したセルの文字色を設定することもできます。

色の指定には、
 ・色名(”yellow”, “red”, “blue”など)を直接使用できます。
 ・HEX値(”#FFFF00″など)を使用することもできます。

  // ログに記録
  console.log(productName + "の在庫が不足しています。");
}

console.log(...):
スクリプトのログに在庫不足の商品名を記録します。
これはデバッグや履歴確認のために表示します。

スクリプトの実行と実行結果

最後に、スプレッドシートを編集して、スクリプトが正しく実行されることを確認します。

1.スプレッドシートの特定セルを変更する

スプレッドシートの在庫数の列で、特定のセルの値を10以下に変更します。

サンプル画像では、セルB4の値を「9」に変更しています。

スプレッドシートを編集する

2.実行結果を確認する

サンプルでは、セルE4に黄色の背景色で、「在庫不足」と入力されます。

スプレッドシートの変更後に、処理が実行されていることを確認

注意点:onEdit関数の制限

onEdit関数を直接使用する場合、Gmailの送信などの高度な権限を必要とする操作は、Google Apps Scriptのセキュリティ制限により実行できません。

そのため、Gmailの送信などの処理を実行したい場合は、トリガー設定でonEditトリガー(スプレッドシート編集時をトリガーとする設定)を使用して、別の関数を呼び出す必要があります。

Googleスプレッドシートで特定のセルが変更されたときに処理を実行するトリガーの設定方法と実装手順を知りたい方はこちらもご覧ください!

まとめ

Google Apps Scriptを使うことで、簡単にスプレッドシートの編集を監視し、特定の条件下で自動的に処理を実行できます。

この方法を応用すれば、在庫管理だけでなく、様々な管理業務の自動化が可能になります。

ぜひ、ご自分の作業に合わせてカスタマイズしてみてください!

コメント

タイトルとURLをコピーしました