しごと自動化レシピ

WORK RECIPE GAS

初回の完了日時だけを編集時に記録する

検証用台帳で状態を完了に変えたとき、空の完了日時欄へ初回時刻を記録します。すでに日時がある行は上書きせず、一セルの手入力だけを対象にした簡単なイベント処理です。

実行確認の記録なし

公式資料を参照して構成した手順です。本記事の操作・コードの実行は未確認です。小さな入力例で期待結果を確かめてから利用してください。

できあがるもの

一セル編集でB2が完了になると空のC2に実行時点の日時が入ります。一度入った日時は状態を変えても残り、初回完了の記録として保持されます。

始める前に

  • ブラウザ版Googleスプレッドシートの編集権限と紐付きApps Script
  • コピーした検証用ファイルで実行。Apps ScriptはV8ランタイムを利用
  • シート名「日時検証」、A列案件・B列状態・C列初回完了日時
  • ファイルとスクリプトのタイムゾーンを日本に設定、既存onEditなし
入力例

日時検証!A1:C3は「案件,状態,初回完了日時」「A,対応中,」「B,対応中,」。C列は空欄にします。

手順

  1. ファイルのコピーでApps Scriptを開き、既存のonEditがないことを確認します。C列はこのスクリプトが書き込む欄とし、元の本番台帳と区別した日時検証シートで試します。
  2. 次の完全なコードをスクリプトへ貼り付けて保存します。他の記事の同名関数があるプロジェクトには混ぜません。 /** @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'); }
  3. コードを保存し、シート画面でB2を手入力で完了にします。C2に現在日時が入るか確認します。エディタからonEditを手動実行してもイベントがないので記録されません。
  4. B2を対応中へ戻し、再度完了へ変えてもC2の初回日時が変わらないか確認します。B3を完了へ変えるとC3には別の時点の日時が入ります。

期待結果と照合する

一セル編集でB2が完了になると空のC2に実行時点の日時が入ります。一度入った日時は状態を変えても残り、初回完了の記録として保持されます。

まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。

うまくいかないとき

  • 複数セルの貼り付け、数式の再計算、別スクリプトによる変更はこの例の対象外です。すべての更新を記録する監査ログではありません。
  • C列は手で変更可能なので改ざん防止にはなりません。証跡が必要な業務では正式な履歴管理を設計します。

止める・元に戻す

onEdit関数を削除して保存すれば自動記録は止まります。検証用C2:C3の日時だけを消し、本番の確定履歴を削除しないでください。

公式資料・対応範囲

参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。

同じツールで試す

GASの記事一覧へ →