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

【GAS】onEdit(e)でセル編集時に自動処理する方法

GAS

Googleスプレッドシートでは、セルの編集をきっかけに、自動で処理を実行できます。

今回は、Google Apps Script(GAS)の onEdit(e) を使って、次の3つの処理を実装します。

  • チェックボックスにチェックを入れるとメッセージを表示
  • ステータスを「完了」にすると背景色を変更
  • ステータスを「完了」にすると完了日時を記録

なお、完成したスプレッドシートの動作については、別の記事で紹介しています。

投稿者
もも

40代・大阪の女性フリーランスSE。
業務効率化・自動化の仕事をしています。
最近はUiPathを中心に、Pythonや生成AIにも挑戦中。
効率化の事例や学んだことなど発信しています。

ももをフォローする

今回使用するスプレッドシート

今回は、次のようなタスク管理表を使用します。

シート名は「タスク管理」とします。

B列にはチェックボックス、C列には「未完了」「作業中」「完了」のプルダウンを設定。

チェックボックスの設定

B2セルを選択し、上部メニューの「挿入」→「チェックボックス」をクリックします。

プルダウンの設定

C2セルを選択し、「挿入」→「プルダウン」をクリックします。

選択肢として、「未完了」「作業中」「完了」を登録します。

これでスプレッドシートの準備は完了です。

onEdit(e)とは?

onEdit(e) は、スプレッドシートのセルが編集されたときに、自動的に実行される関数です。

GASには、特定の出来事をきっかけに処理を実行する「トリガー」という仕組みがあります。

onEdit(e) は、その中でも「シンプルトリガー」と呼ばれるものです。

function onEdit(e) {
  // セルが編集されたときの処理
}

この名前で関数を作成するだけで、セルの編集時に自動実行されます。

別途トリガーを登録する必要はありません。

onEdit(e)の「e」とは?

e は「イベントオブジェクト」と呼ばれ、セルの編集に関する情報が入っています。

例えば、次のような情報を取得できます。

コード内容
e.range編集されたセル範囲
e.range.getSheet()編集されたシートを取得
e.range.getA1Notation()編集されたセルの位置を取得
e.range.getValue()セルの現在の値を取得
e.source編集されたスプレッドシート

今回のコードでは、これらの情報を利用して処理を分岐させています。

e に編集されたセルの情報が入っているので、どのセルが変更されたかを判定できるんですね。

今回作成したGASコード

以下が、今回使用したコードです。

スプレッドシートの「拡張機能」→「Apps Script」を開き、コードを貼り付けて保存します。

保存後は、スプレッドシートのB2セルやC2セルを編集すると、自動的に処理が実行されます。


function onEdit(e) {

  // 編集されたシート、セル、値を取得
  const sheet = e.range.getSheet();
  const cell = e.range.getA1Notation();
  const value = e.range.getValue();

  // 対象のシート以外は処理を終了
  if (sheet.getName() !== "タスク管理") return;

  // B2セルのチェックボックスがオンになった場合
  if (cell === "B2" && value === true) {

    // ① 作業開始のメッセージを表示
    e.source.toast("作業を開始しました", "作業開始", 10);
  }

  // C2セルのステータスが「完了」になった場合
  if (cell === "C2" && value === "完了") {

    // ② 背景色をグレーに変更
    sheet.getRange("A2:D2").setBackground("#D9D9D9");

    // ③ 完了日時を記録
    const dateCell = sheet.getRange("D2");
    dateCell.setValue(new Date());
  }
}

今回のコードは、シート名が「タスク管理」の場合のみ動作します。

また、B2セルとC2セルを指定しているため、1件のタスクだけを対象としています。

onEdit(e)を使用するときの注意点

Apps Scriptの実行ボタンから直接実行しない

onEdit(e) は、セルの編集時にGoogleからイベント情報が渡される仕組みです。

Apps Scriptの実行ボタンから直接実行すると、e が渡されないため、今回のコードではエラーになります。

動作確認は、スプレッドシートのセルを実際に編集して行います。

GASによるセルの変更では実行されない

GASの setValue() などでセルを書き換えても、onEdit(e) は実行されません。

また、数式の再計算によって表示結果が変わった場合も対象外です。

実行時間には制限がある

onEdit(e) のようなシンプルトリガーには、1回あたり30秒の実行時間制限があります。

今回のような簡単な処理では通常問題ありませんが、大量のデータを処理する場合などには注意が必要です。

まとめ

今回は、GASの onEdit(e) を使って、セルの編集をきっかけに処理を自動実行する方法を紹介しました。

onEdit(e) を使えば、セルの編集内容に応じて処理を実行できるので、さまざまなスプレッドシートの自動化に応用できそうです。