Googleスプレッドシートで作業を自動化したいと考えたとき、まず思い浮かぶのが「セルを編集したら自動で何かを実行する」機能です。特定のセルに値を入力した瞬間に日付を記録したり、データを別のシートに転記したりする処理を、手作業で行うのは非効率です。この記事では、Apps ScriptのonEditトリガーを使って、セル編集を検知して自動処理を走らせる方法を解説します。スクリプトの基本構文から実践的なサンプル、注意点までを網羅しますので、ぜひ参考にしてください。
【要点】onEditトリガーでセル編集を検知して自動処理を始めるためのポイント
- onEdit関数の基本構造: スクリプトエディタに
function onEdit(e){}と書き、引数eから編集情報を取得します。これにより編集されたセル範囲や値を利用できます。 - 条件分岐で処理を絞り込む方法:
e.rangeやe.valueを使って、特定の列や値が入力されたときだけ処理を実行します。無駄な処理を防ぎます。 - トリガーの制限と注意点: onEditは単純なトリガーであり、複雑な処理や外部API呼び出しには時間制限があります。軽量な処理に限定しましょう。
ADVERTISEMENT
目次
onEditトリガーの仕組みと基本的な使い方
onEditトリガーは、Googleスプレッドシートのセルが編集されたときに自動的に実行される特別な関数です。この関数はApps Scriptのプロジェクトにfunction onEdit(e){}という名前で定義します。引数のe(イベントオブジェクト)には、編集されたセルの範囲や変更前後の値など、編集に関する詳細な情報が含まれています。これを用いて、編集内容に応じた処理を記述します。
onEditトリガーの最大の特徴は、ユーザーがスプレッドシート上で何かを編集した瞬間にスクリプトが自動実行される点です。編集が行われるたびに毎回起動しますので、条件分岐を使って処理を限定しないと、意図しないタイミングでスクリプトが動いてしまうこともあります。基本的な流れは、スクリプトエディタを開いてonEdit関数を書き、保存するだけです。特別な設定は不要で、関数名が正しければ自動的にトリガーとして登録されます。
onEditトリガーを設定して自動処理を実行する手順
ここでは、実際にonEditトリガーを使ってセル編集を検知し、自動処理を行う手順を説明します。例として、A列に「完了」と入力したらB列に現在の日時を記録する処理を作成します。
1. スクリプトエディタを開く
- スプレッドシートを開く
自動処理を追加したいスプレッドシートを開きます。 - メニューから「拡張機能」→「Apps Script」を選択する
スクリプトエディタが新しいタブで開きます。ここでコードを書きます。
2. onEdit関数を記述する
- 関数を定義する
エディタに以下のコードを入力します。function onEdit(e) { var range = e.range; var sheet = range.getSheet(); var column = range.getColumn(); var row = range.getRow(); var value = e.value; // A列(列番号1)で「完了」と入力された場合 if (column === 1 && value === '完了') { var targetCell = sheet.getRange(row, 2); // B列(列番号2) var now = new Date(); targetCell.setValue(now); } } - スクリプトを保存する
フロッピーアイコンをクリックするか、Ctrl+S(MacならCmd+S)で保存します。プロジェクト名は任意で構いません。
3. 動作を確認する
- スプレッドシートに戻り、A列の任意のセルに「完了」と入力する
すると、同じ行のB列に現在の日時が自動で入力されます。 - 別の値を入力してみる
「完了」以外の値では何も起こらないことを確認します。条件分岐が正しく動作している証拠です。
このサンプルは最小限の実装ですが、条件を変えれば様々な自動処理に応用できます。例えば、特定の列の値が変更されたら別のシートにコピーする、編集したセルの背景色を変えるなど、アイデア次第で拡張できます。
onEditトリガーを使うときの注意点とよくあるトラブル
編集が複数セルにまたがるときの処理
ユーザーが一度に複数のセルをコピー&ペーストした場合、onEdit関数は一度だけ呼ばれますが、e.rangeは選択されたすべてのセルを含む範囲オブジェクトになります。範囲内の各セルに対して個別に処理を行いたい場合は、ループ処理が必要です。例えば、e.range.getValues()で2次元配列を取得し、行と列でループします。
編集のたびにスクリプトが実行されるので重くなることがある
onEditは非常に頻繁に実行される可能性があります。例えば、大量のデータを一括編集すると、そのたびにスクリプトが動き、処理に時間がかかるとスプレッドシートの応答が遅くなります。そのため、スクリプト内では軽量な処理だけを行い、重い処理(他のAPI呼び出しなど)は避けるべきです。どうしても必要な場合は、別のトリガー(時間主導など)と組み合わせる工夫をします。
トリガーが動作しない場合の確認点
関数名が正しく「onEdit」になっているか確認します。大文字小文字は区別されますので、onEdit(最初のoは小文字、Eは大文字)と正確に書いてください。また、スクリプトエディタでエラーがないか確認し、保存も忘れずに行います。それでも動かない場合は、スプレッドシートの権限を確認します。スクリプトが初めて実行される際には、承認ダイアログが表示されますが、過去に拒否した場合などは再度承認が必要です。
変更前の値を取得したい場合
onEditのイベントオブジェクトeには、e.oldValueというプロパティもあります。これは編集される前のセルの値です。ただし、セルが空だった場合はundefinedになります。これを利用すると、値が変更されたときに前後の差を比較する処理が書けます。例えば、「未完了」から「完了」に変わったときだけ日付を記録するなど、より細かい制御が可能です。
ADVERTISEMENT
onEditトリガーと他の自動化手法の比較
| 手法 | 起動条件 | 処理の柔軟性 | 適した用途 |
|---|---|---|---|
| onEditトリガー | セル編集直後 | 軽量な処理に限定 | 即時反映が必要な処理(例:編集日時記録) |
| 時間主導トリガー | 定期的な時間(毎時、毎日など) | 比較的重い処理も可能 | 集計やメール送信などのバッチ処理 |
| カスタムメニューやボタン | ユーザーが明示的に実行 | 自由 | ユーザー操作が必要な場合 |
この表からわかるように、onEditトリガーは即時性が求められる小規模な自動化に最適です。大規模な処理や定期実行が必要な場合は、時間主導トリガーや他の方法を検討しましょう。
まとめ
この記事では、GoogleスプレッドシートのonEditトリガーを使って、セル編集を検知して自動処理を実行する方法を解説しました。onEdit関数の基本的な書き方や条件分岐の使い方、複数セル編集への対応、注意点などを理解できたことでしょう。最初は簡単な日時記録から始めて、徐々に在庫管理の自動更新やタスク管理のステータス変更など、実践的な処理に応用してみてください。次のステップとしては、e.oldValueを活用して値の変更差分を追跡するスクリプトや、onChangeトリガーとの使い分けを学ぶとさらに自動化の幅が広がります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
