公式資料を参照して構成した手順です。本記事の操作・コードの実行は未確認です。小さな入力例で期待結果を確かめてから利用してください。
できあがるもの
一セル編集でB2が完了になると空のC2に実行時点の日時が入ります。一度入った日時は状態を変えても残り、初回完了の記録として保持されます。
始める前に
- ブラウザ版Googleスプレッドシートの編集権限と紐付きApps Script
- コピーした検証用ファイルで実行。Apps ScriptはV8ランタイムを利用
- シート名「日時検証」、A列案件・B列状態・C列初回完了日時
- ファイルとスクリプトのタイムゾーンを日本に設定、既存onEditなし
入力例
日時検証!A1:C3は「案件,状態,初回完了日時」「A,対応中,」「B,対応中,」。C列は空欄にします。
手順
- ファイルのコピーでApps Scriptを開き、既存のonEditがないことを確認します。C列はこのスクリプトが書き込む欄とし、元の本番台帳と区別した日時検証シートで試します。
- 次の完全なコードをスクリプトへ貼り付けて保存します。他の記事の同名関数があるプロジェクトには混ぜません。 /** @OnlyCurrentDoc */ function onEdit(e) { if(!e || !e.range) return; const r=e.range, s=r.getSheet(); if(s.getName()!=='日時検証' || r.getColumn()!==2 || r.getRow()<2 || r.getRow()>100 || r.getNumRows()!==1 || r.getNumColumns()!==1 || e.value!=='完了') return; const target=s.getRange(r.getRow(),3); if(target.getValue()!=='') return; target.setValue(new Date()).setNumberFormat('yyyy/mm/dd hh:mm:ss'); }
- コードを保存し、シート画面でB2を手入力で完了にします。C2に現在日時が入るか確認します。エディタからonEditを手動実行してもイベントがないので記録されません。
- B2を対応中へ戻し、再度完了へ変えてもC2の初回日時が変わらないか確認します。B3を完了へ変えるとC3には別の時点の日時が入ります。
期待結果と照合する
一セル編集でB2が完了になると空のC2に実行時点の日時が入ります。一度入った日時は状態を変えても残り、初回完了の記録として保持されます。
まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。
うまくいかないとき
- 複数セルの貼り付け、数式の再計算、別スクリプトによる変更はこの例の対象外です。すべての更新を記録する監査ログではありません。
- C列は手で変更可能なので改ざん防止にはなりません。証跡が必要な業務では正式な履歴管理を設計します。
止める・元に戻す
onEdit関数を削除して保存すれば自動記録は止まります。検証用C2:C3の日時だけを消し、本番の確定履歴を削除しないでください。
公式資料・対応範囲
参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。