Googleスプレッドシートでは、セルの編集をきっかけに、自動で処理を実行できます。
今回は、Google Apps Script(GAS)の onEdit(e) を使って、次の3つの処理を実装します。
- チェックボックスにチェックを入れるとメッセージを表示
- ステータスを「完了」にすると背景色を変更
- ステータスを「完了」にすると完了日時を記録
なお、完成したスプレッドシートの動作については、別の記事で紹介しています。
今回使用するスプレッドシート
今回は、次のようなタスク管理表を使用します。

シート名は「タスク管理」とします。
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) を使えば、セルの編集内容に応じて処理を実行できるので、さまざまなスプレッドシートの自動化に応用できそうです。

