RENOY

スプレッドシートの日付が「45857」のような数字になる原因|GAS連携の日付ズレ対策

目次

「集計表の日付欄が、いつの間にか5桁の数字になっている」「アプリの画面では正しいのに、スプレッドシートを開くと1日前の日付になっている」——業務自動化の現場で、地味に多いトラブルがこれです。

私たちが担当した実案件(匿名)でも、スプレッドシート・GAS・AppSheetの3層でデータをやり取りする仕組みで、日付が壊れる事象が2パターン発生しました。厄介なのは、どちらも画面上は正しく見える瞬間があることです。気づいたときには、集計結果や日報の締め日がずれている。

この記事では、その2つの原因と対処法、導入時に確認しておくべきチェックリストを整理します。

この記事の結論

  • 日付が数字になる原因は型の不一致。文字列で書き込むと壊れる
  • 日付が1日ズレる原因はタイムゾーン設定の不一致
  • 対策は開発の最初に型とタイムゾーンを揃えること

スプレッドシートの日付が数字になる原因とは

前提として、スプレッドシートは日付を内部的に連番の数値として保持しています。画面に「2026/08/08」と表示されていても、中身は数値です。表示形式が日付になっているから、日付らしく見えているだけ、と考えると分かりやすくなります。

つまり、日付が「45857」のような数字で表示されているとき、データが壊れているわけではありません。中身の数値に対して、日付の表示形式が当たっていない状態です。

問題は、この数値と表示形式のズレが、GASや外部アプリからの書き込みをきっかけに起きることです。人が手で入力しているうちは滅多に起きませんが、自動化の仕組みを挟んだ瞬間に表面化します。

3層でデータが流れる仕組みでは、壊れる箇所は次のとおりです。

パターン1:文字列で書き込んだ日付がシリアル値と誤解釈される

1つ目は、GASからスプレッドシートへ日付を文字列として書き込んだケースです。

プログラム側では、日付を扱いやすいように「2026-08-08」といった文字列に整形することがよくあります。ところが、その文字列や、処理の途中で数値に変わった値をそのままセルに書き込むと、スプレッドシート側が「これは日付の連番だな」と判断してしまうことがあります。

結果として現れたのが、「45857/01/01」のような表示でした。本来の日付の連番が「年」として解釈され、そこに月日が補われた形です。

このパターンの厄介な点は3つあります。

  • 一部の行だけ壊れることがあり、全件チェックしないと見つからない
  • エラーにならないため、処理は正常終了してしまう
  • 集計関数やピボットは「日付として」計算するため、とんでもない値が静かに混ざる

見た目の異常に気づけた時点で、まだ運がいい方です。数字が数字のまま集計に流れ込むと、月次レポートの数字だけがおかしくなり、原因追跡に時間がかかります。

対処はシンプルで、日付は文字列ではなくDateオブジェクトで渡すことです。 そのうえで、書き込み先の列の表示形式を「日付」に固定しておきます。整形した文字列が必要なのは、あくまでメール本文やファイル名など「見せる」場面だけ、と切り分けておくと迷いません。

パターン2:シートとスクリプトのタイムゾーン不一致で1日ズレる

2つ目は、より気づきにくいトラブルです。

スプレッドシートにはファイルごとのタイムゾーン設定があり、GASのプロジェクトにもスクリプト側のタイムゾーン設定があります。この2つは別物で、それぞれ独立して設定されています。

実案件で起きたのは、シート側が米国の時間(ロサンゼルス)のまま、スクリプト側は日本時間(JST)という組み合わせでした。新規に作成したファイルやプロジェクトが、初期設定のまま使われていたためです。

日本時間と米国西海岸の時間には十数時間の差があります。そのため、日付の境目をまたぐ時間帯のデータだけ、1日ズレるという現象が起きます。

症状疑うべき原因
日付が5桁の数字で表示される書き込みの型/表示形式
「45857/01/01」のような表示文字列・数値の誤解釈
全件ではなく一部の行だけズレるタイムゾーンの不一致
深夜・早朝の登録分だけズレるタイムゾーンの不一致

「一部だけ」というのが、この問題の見つけにくさの正体です。日中に入力したデータは正しく見えるため、テスト時には問題が出ません。運用が始まり、残業時間帯や早朝の入力が発生して初めて、締め日をまたぐデータが前日・翌日に紛れ込むことになります。

日報や勤怠、売上の日次集計のように「その日のうちに入ったかどうか」が意味を持つ業務では、これは実害に直結します。

なお、各サービスの設定画面の場所や仕様は変わるため、最新の手順は公式ドキュメントで確認してください。

日付ズレの対策:最初に型とタイムゾーンを揃える

2つのパターンを踏まえた対処は、次の3ステップです。あとから直すより、開発の最初にやってしまう方が圧倒的に安く済みます。

  1. タイムゾーンを統一する:スプレッドシート側とスクリプト側、両方の設定を日本時間に揃えます。新規ファイル・新規プロジェクトを作った直後に確認するのを習慣にします。
  2. 書き込む値の型を揃える:日付はDateオブジェクトで渡し、書き込み先の列は表示形式を日付に固定します。文字列に整形するのは表示用途だけに限定します。
  3. 日付の境目でテストする:日中のデータだけで検証を終わらせないこと。深夜・早朝の時刻を含むデータでテストすると、タイムゾーンのズレはその場で表面化します。

この3つを外すと、「画面では合っているのに、集計だけ合わない」という最も追いにくい不具合を抱えることになります。

導入時チェックリスト

自社で仕組みを作る場合も、外注する場合も、次の項目を着手前に確認しておくと安全です。

  • スプレッドシートのタイムゾーンは日本時間か
  • GASプロジェクトのタイムゾーンは日本時間か
  • 日付を扱う列の表示形式は「日付」に固定されているか
  • 日付はDateオブジェクトで書き込む設計になっているか
  • 深夜・早朝の時刻を含むテストデータで検証したか
  • 外部アプリ(AppSheet等)側の日付設定も揃っているか
  • 既存データに、数値のまま残っている日付がないか

チェック項目そのものは難しくありません。難しいのは「疑うきっかけがない」ことです。だからこそ、チェックリストとして最初に潰しておく価値があります。

よくある質問

Q. スプレッドシートの日付が45857のような数字になるのはなぜ? スプレッドシートは日付を内部的に連番の数値で持っているためです。書式が「数値」になっているか、文字列として書き込まれた値が数値と判定されると、その連番がそのまま表示されます。

Q. GASで書き込んだ日付が1日ズレるのはなぜ? スプレッドシート側とスクリプト側のタイムゾーン設定が異なることが主な原因です。米国時間と日本時間では日付の境目が数時間ずれるため、深夜や早朝のデータで1日分の差が出ます。

Q. 日付ズレを防ぐには何をすればいいですか? 開発の最初にシートとスクリプトのタイムゾーンを日本時間に統一し、日付は文字列ではなくDateオブジェクトで渡すことです。列の表示形式も日付に固定しておきます。

まとめ

  • 日付が数字になるのは、スプレッドシートが日付を連番の数値で持っているため
  • 文字列で書き込むと誤解釈され、「45857/01/01」のような表示になる
  • シートとスクリプトのタイムゾーン不一致で、一部データだけ1日ズレる
  • 対処は、最初にタイムゾーンを統一し、日付はDateオブジェクトで渡すこと
  • 検証は必ず日付の境目の時刻を含めて行う

RENOYでは、GASやAppSheetを使った業務自動化の設計・開発から、運用が回るまでの伴走を行っています。「作ったものの、数字が合わない気がする」という状態からのご相談も歓迎です。まずはお気軽に無料個別相談(オンライン・60分)をご利用ください。サービス内容をまとめた資料は資料請求からご覧いただけます。

#GAS#スプレッドシート#AppSheet#業務自動化#中小企業