スプレッドシートに日時を入れる方法は、目的によって3つに分かれます。
選び方を間違えると、あとから開いたときに日時が書き換わってしまいます。
先に結論をまとめます。
| やりたいこと | 方法 | あとで変わる? |
|---|---|---|
| いまの日時を打ち込む | ショートカット | 変わらない |
| 常に今日の日時を表示 | =NOW() =TODAY() | 変わる |
| メニューを押して記録 | GAS | 変わらない |
ショートカットで打ち込む
いちばん手軽です。
| 入れたいもの | Windows | Mac |
|---|---|---|
| 日付 | Ctrl+; | ⌘+; |
| 時刻 | Ctrl+Shift+; | ⌘+Shift+; |
| 日付と時刻 | Ctrl+Alt+Shift+; | ⌘+Option+Shift+; |
押した瞬間の日時が、ただの値としてセルに入ります。
関数ではないので、あとから開いても変わりません。
記録として残したいなら、これがいちばん確実です。
関数で入れる
=NOW() 日付と時刻
=TODAY() 日付だけここが多くの人がつまずくところです。
この2つは再計算により値が更新されます。
更新タイミングはスプレッドシートの計算設定にも依存するため、入力時刻を固定する用途には向きません。
つまり、「入力した時刻」としては残りません。
昨日入れたはずのセルが、今日の日付に変わってしまいます。
使いどころは「今日の日付を見出しに出す」といった、常に最新でよい場面です。
関数の結果を固定する
いったん =NOW() で出してから、値に変えることもできます。
- セルをコピーする
- 同じ場所に「値のみ貼り付け」する(
Ctrl+Shift+V)
これで関数が消え、その時点の日時が残ります。
日付の見た目を変える
秒まで出したい、逆に日付だけにしたい、という場合は表示形式で変えます。
「表示形式」>「数字」から、日付や時刻の形を選べます。
中の値は同じで、見え方だけが変わります。
Googleフォームの回答時刻
フォームの回答をスプレッドシートに集めている場合、タイムスタンプの列は自動で作られます。
回答が送信された時刻が、いちばん左の列に記録されます。
こちらは設定不要です。
タイムスタンプ列を画面から隠すだけなら非表示を使います。
列を削除した場合の復元可否は変更履歴などの状況によるため、削除前にコピーを残してください。
メニューを押して記録する
以下のサンプルはメニューをクリックして日時を入力する仕組みです。
入力したら自動で日時が入るようにしたい場合は、後半の「入力したら自動で日時を入れる」を見てください。
作業ログのように、誰かが入力したその時刻を毎回残したい場合は、ショートカットの押し忘れが起きます。
そこでGASを使い、メニューやボタンから入れられるようにします。
Googleスプレッドシートでタイムスタンプを簡単挿入する方法
カスタムメニューを作成して打刻する手順を解説します。
コードの挿入
- スプレッドシート上部メニューから
「拡張機能」>「Apps Script」 を選択 - 開いたスクリプトエディタに、以下のコードを貼り付けます
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()だけを入力します。
右側の「日付と時刻」「日付だけ」という説明まで貼り付けないでください。
ショートカットが反応しない場合はキーボード配列やブラウザーの違いを確認してください。
メニューによる打刻でも、押し忘れや後からの編集を防ぐ監査ログにはなりません。
