Amazonで商品を見るセール会場へ

Googleスプレッドシート│タイムスタンプを入れる方法とNOW関数の注意点

スプレッドシートに日時を入れる方法は、目的によって3つに分かれます。

選び方を間違えると、あとから開いたときに日時が書き換わってしまいます。

先に結論をまとめます。

やりたいこと方法あとで変わる?
いまの日時を打ち込むショートカット変わらない
常に今日の日時を表示=NOW() =TODAY()変わる
メニューを押して記録GAS変わらない
目次

ショートカットで打ち込む

いちばん手軽です。

入れたいものWindowsMac
日付Ctrl+;⌘+;
時刻Ctrl+Shift+;⌘+Shift+;
日付と時刻Ctrl+Alt+Shift+;⌘+Option+Shift+;

押した瞬間の日時が、ただの値としてセルに入ります。

関数ではないので、あとから開いても変わりません。

記録として残したいなら、これがいちばん確実です。

関数で入れる

=NOW()     日付と時刻
=TODAY()   日付だけ

ここが多くの人がつまずくところです。

この2つは再計算により値が更新されます。

更新タイミングはスプレッドシートの計算設定にも依存するため、入力時刻を固定する用途には向きません。

つまり、「入力した時刻」としては残りません。

昨日入れたはずのセルが、今日の日付に変わってしまいます。

使いどころは「今日の日付を見出しに出す」といった、常に最新でよい場面です。

関数の結果を固定する

いったん =NOW() で出してから、値に変えることもできます。

  1. セルをコピーする
  2. 同じ場所に「値のみ貼り付け」する(Ctrl+Shift+V)

これで関数が消え、その時点の日時が残ります。

日付の見た目を変える

秒まで出したい、逆に日付だけにしたい、という場合は表示形式で変えます。

「表示形式」>「数字」から、日付や時刻の形を選べます。

中の値は同じで、見え方だけが変わります。

Googleフォームの回答時刻

フォームの回答をスプレッドシートに集めている場合、タイムスタンプの列は自動で作られます。

回答が送信された時刻が、いちばん左の列に記録されます。

こちらは設定不要です。

タイムスタンプ列を画面から隠すだけなら非表示を使います。

列を削除した場合の復元可否は変更履歴などの状況によるため、削除前にコピーを残してください。

メニューを押して記録する

以下のサンプルはメニューをクリックして日時を入力する仕組みです。

入力したら自動で日時が入るようにしたい場合は、後半の「入力したら自動で日時を入れる」を見てください。

作業ログのように、誰かが入力したその時刻を毎回残したい場合は、ショートカットの押し忘れが起きます。

そこでGASを使い、メニューやボタンから入れられるようにします。

Googleスプレッドシートでタイムスタンプを簡単挿入する方法

カスタムメニューを作成して打刻する手順を解説します。

コードの挿入

  1. スプレッドシート上部メニューから
     「拡張機能」>「Apps Script」 を選択
  2. 開いたスクリプトエディタに、以下のコードを貼り付けます

Googleスプレッドシートのほかの操作は、まとめからご覧いただけます。

日付つきで自動コピーする方法はこちらです。

function setTimeStamp() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm');
  sheet.getActiveRange().setValue(time);
}

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu('マイツール'); 
  menu.addItem('タイムスタンプ', 'setTimeStamp');
  menu.addToUi();
}
  • 日付形式は「yyyy/MM/dd HH:mm」で表示されます(日本時間)
  • 書式は Utilities.formatDate 関数で自由にカスタマイズ可能

保存後、スプレッドシートを再読み込みするとonOpenが動き、カスタムメニューが追加されます。

使い方

  • 打刻したいセル、または複数のセルを選択
  • メニューバーに追加された 「マイツール」>「タイムスタンプ」 をクリック

すると、以下のように選択範囲に現在の日時が一括で入力されます。

メニューの「マイツール」から「タイムスタンプ」を実行し、選択した範囲に現在の日時が一括で入力された状態。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

シートのデータを整える方法は、ほかにも書いています。

入力したら自動で日時を入れる

B列に何か入力したら、同じ行のA列にその日時が自動で入るようにする方法です。

GASを使う方法と、GASを使わずに関数だけで済ませる方法があります。

GASのonEditで自動で入れる

「拡張機能」>「Apps Script」を開き、次のコードを貼り付けて保存します。

function onEdit(e) {
  const sheet = e.range.getSheet();
  if (sheet.getName() !== 'シート1') return; // 対象のシート名
  if (e.range.getColumn() !== 2) return;      // B列を編集したときだけ
  const row = e.range.getRow();
  if (row === 1) return;                      // 1行目(見出し)は除く
  const stamp = sheet.getRange(row, 1);       // A列に記録する
  if (e.range.getValue() === '') {
    stamp.clearContent();                     // B列を消したら日時も消す
  } else {
    stamp.setValue(new Date());
  }
}

onEditは、セルを編集したときに自動で動く関数で、実行ボタンを押したり、トリガーを設定したりする必要はありません。

シート名と列の番号は、自分の表に合わせて書き換えます。

ほかのスクリプトが書き込んだ変更では動かないので、手で入力したときの記録に向いています。

GASを使わずに関数だけで入れる

「ファイル」>「設定」の「計算」タブで、「反復計算」をオンにします。

A2セルに次の式を入れて、下の行にコピーします。

=IF(B2="","",IF(A2="",NOW(),A2))

B2が空ならA2も空のままで、B2に入力された最初の一回だけNOW()の日時が入り、そのあとは同じ日時が残ります。

自分のセルを参照する式なので、反復計算をオンにしないとエラーになります。

日時が数字で表示されたときは、「表示形式」>「数字」>「日時」を選びます。

まとめ

  • 記録として残すならショートカット(日付 Ctrl+;/時刻 Ctrl+Shift+;)
  • =NOW() と =TODAY() は再計算で更新されるため、固定した記録には向きません
  • 関数の結果を残したいときは「値のみ貼り付け」で固定する
  • Googleフォームの回答時刻は自動で列ができる。消さずに非表示にする
  • GASのメニューで選択範囲に一括入力できるが、実行操作は必要

サンプルは選択範囲の既存の値や数式を上書きします。

空のセルで試し、範囲選択を確認してからメニューを実行してください。

Utilities.formatDateの戻り値は文字列です。

このコードは日本時間の分単位の表示を入力する例で、Dateオブジェクトを保存するコードではありません。

日時計算に使う場合は、入力後のセルの型を確認してください。

掲載した関数の例は、セルには=NOW()または=TODAY()だけを入力します。

右側の「日付と時刻」「日付だけ」という説明まで貼り付けないでください。

ショートカットが反応しない場合はキーボード配列やブラウザーの違いを確認してください。

メニューによる打刻でも、押し忘れや後からの編集を防ぐ監査ログにはなりません。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次