小手箱 手元で終わる小道具

CSVをExcelで開くと数字が日付に変わる原因と、その防ぎ方

「1-2」が1月2日に、「007」が7になる。Excelが値の型を推測するせいです。開く前に防ぐ手順と、開いたあとでは戻せない理由を説明します。

2026-09-08

商品コードの「1-2」が「1月2日」になっていた。郵便番号の先頭の0が消えていた。CSVをExcelで開いただけなのに、中身が書き換わっている。

これはファイルが壊れたのではありません。Excelが値の意味を推測した結果です。

何が起きるか

CSVに書かれている文字列が、Excelの中では別のものに変わります。

CSVに書かれた値Excelでの表示何が起きたか
1-21月2日日付として解釈された
2/32月3日同上
0077数値になり先頭の0が落ちた
090123456789012345678同上
1E5100000指数表記として解釈された
12345678901234561.23457E+15数値になり、指数表記で表示された
(100)-100括弧が負の数として解釈された

最後から2番目が特に厄介です。指数表記になるだけなら、セルの書式を変えれば元の見た目に戻せそうに思えます。ところが戻すと 1234567890123450 になります。Excelは数値を15桁までしか保持しないため、16桁目以降は0に置き換わっています。

クレジットカード番号、口座番号、一部の伝票番号がこれに当たります。桁数は変わらないので、並べて見比べないと気づきません。

原因は、CSVに型を書く場所が無いこと

CSVはただのテキストです。この列は文字列である、という情報を書き込む場所がありません。 文字コードを記録する場所が無いために文字化けが起きるのと、同じ構造の問題です。

情報が無いのでExcelは推測します。ハイフンやスラッシュで区切られた数字を見れば日付だと判断し、頭に0の付いた数字を見れば数値だと判断します。多くの場合その推測は当たりますが、商品コードや電話番号のときには外れます。

引用符で囲んでも防げません

"1-2" のようにダブルクォートで囲めば文字列として扱われる、と考えている方がいますが、Excelはこれを日付にします。

CSVの引用符は、値の中にカンマや改行を含めるための記法です。型を指定する機能ではありません。囲っても囲わなくても、Excelの推測は変わりません。

開く前に防ぐ

ダブルクリックで開かない

Excelで扱う必要があるなら、この経路を使ってください。

  1. Excelを起動し、空のブックを開く
  2. 「データ」タブ →「テキストまたはCSVから」→ ファイルを選ぶ
  3. プレビューが出たら、「読み込み」ではなく「データの変換」を押す
  4. 変換されたくない列を選び、「変換」タブ → データ型を「テキスト」にする
  5. 「閉じて読み込む」

手数はかかりますが、列ごとに指定できるのはこの経路だけです。

古いExcelでこの画面が出ない場合は、ファイルの拡張子を .csv から .txt に変えてから開いてください。テキストファイルウィザードが起動し、同じように列ごとの書式を選べます。

そもそもExcelで開かない

中身を確認したいだけなら、Excelを使う理由はありません。表計算の機能が要らないなら、CSVをそのまま表示する道具の方が事故が起きません。

小手箱のLoupeは、CSVを1行も書き換えずに表示します(ページは英語です)。ブラウザの中だけで動くので、ファイルはどこにも送信されません。

配る側になったとき

自分がCSVを作って渡す場合、受け取った相手がダブルクリックで開くことは避けられません。変換されて困る列があるなら、CSVで渡さないのが確実です。 xlsx形式なら型が保存されるため、この問題は起きません。

なお、="0123" と書けば文字列として読まれる、という回避策がネット上で紹介されています。Excelでは意図どおりに動きますが、これは値ではなく数式です。

自分だけで使うなら構いませんが、人に配るファイルには使わない方が安全です。

Microsoft 365 なら設定で一部止められる

Microsoft 365 版のExcelには、この自動変換の一部を無効にする設定が追加されています。

ファイル → オプション → データ →「自動データ変換」

先頭の0を削除するかどうか、桁数の多い数値を指数表記にするかどうかなどを、個別に切り替えられます。項目が見当たらなければ、お使いのバージョンには入っていません。永続ライセンス版には無い場合があります。

止められる範囲はバージョンによって違います。設定したら、実際に自分の困っているファイルで確かめてください。 設定を入れたつもりで変換され続けている、というのがいちばん危ない状態です。

開いたあとでは戻せません

ここが重要です。変換はファイルを開いた時点で完了しています。

日付になった「1-2」は、Excelの中では日付を表す数値になっています。2026年に開いたなら 46024 です。ここでセルの書式を「文字列」に変えても、表示されるのは 46024 であって、元の 1-2 ではありません。変換前の文字列はもう残っていません。

Ctrl+Z でも戻りません。取り消せるのは自分がした操作だけで、読み込み時の変換は対象外です。

そして変換された状態で上書き保存すると、CSVの中身も書き換わります。 元のデータは失われます。

対処は一つだけです。元のCSVをもう一度取得し直してください。 ダウンロードし直す、送り主にもらい直す。それが唯一確実な方法です。

まとめ