「1-2」が1月2日に、「007」が7になる。Excelが値の型を推測するせいです。開く前に防ぐ手順と、開いたあとでは戻せない理由を説明します。
2026-09-08
商品コードの「1-2」が「1月2日」になっていた。郵便番号の先頭の0が消えていた。CSVをExcelで開いただけなのに、中身が書き換わっている。
これはファイルが壊れたのではありません。Excelが値の意味を推測した結果です。
CSVに書かれている文字列が、Excelの中では別のものに変わります。
| CSVに書かれた値 | Excelでの表示 | 何が起きたか |
|---|---|---|
1-2 | 1月2日 | 日付として解釈された |
2/3 | 2月3日 | 同上 |
007 | 7 | 数値になり先頭の0が落ちた |
09012345678 | 9012345678 | 同上 |
1E5 | 100000 | 指数表記として解釈された |
1234567890123456 | 1.23457E+15 | 数値になり、指数表記で表示された |
(100) | -100 | 括弧が負の数として解釈された |
最後から2番目が特に厄介です。指数表記になるだけなら、セルの書式を変えれば元の見た目に戻せそうに思えます。ところが戻すと 1234567890123450 になります。Excelは数値を15桁までしか保持しないため、16桁目以降は0に置き換わっています。
クレジットカード番号、口座番号、一部の伝票番号がこれに当たります。桁数は変わらないので、並べて見比べないと気づきません。
CSVはただのテキストです。この列は文字列である、という情報を書き込む場所がありません。 文字コードを記録する場所が無いために文字化けが起きるのと、同じ構造の問題です。
情報が無いのでExcelは推測します。ハイフンやスラッシュで区切られた数字を見れば日付だと判断し、頭に0の付いた数字を見れば数値だと判断します。多くの場合その推測は当たりますが、商品コードや電話番号のときには外れます。
"1-2" のようにダブルクォートで囲めば文字列として扱われる、と考えている方がいますが、Excelはこれを日付にします。
CSVの引用符は、値の中にカンマや改行を含めるための記法です。型を指定する機能ではありません。囲っても囲わなくても、Excelの推測は変わりません。
Excelで扱う必要があるなら、この経路を使ってください。
手数はかかりますが、列ごとに指定できるのはこの経路だけです。
古いExcelでこの画面が出ない場合は、ファイルの拡張子を .csv から .txt に変えてから開いてください。テキストファイルウィザードが起動し、同じように列ごとの書式を選べます。
中身を確認したいだけなら、Excelを使う理由はありません。表計算の機能が要らないなら、CSVをそのまま表示する道具の方が事故が起きません。
小手箱のLoupeは、CSVを1行も書き換えずに表示します(ページは英語です)。ブラウザの中だけで動くので、ファイルはどこにも送信されません。
自分がCSVを作って渡す場合、受け取った相手がダブルクリックで開くことは避けられません。変換されて困る列があるなら、CSVで渡さないのが確実です。 xlsx形式なら型が保存されるため、この問題は起きません。
なお、="0123" と書けば文字列として読まれる、という回避策がネット上で紹介されています。Excelでは意図どおりに動きますが、これは値ではなく数式です。
="0123" という文字列がそのまま出ます= で始まるセルをExcelは数式として実行します。配布されるCSVに悪意ある式を混ぜる攻撃経路として知られています(CSVインジェクション)自分だけで使うなら構いませんが、人に配るファイルには使わない方が安全です。
Microsoft 365 版のExcelには、この自動変換の一部を無効にする設定が追加されています。
ファイル → オプション → データ →「自動データ変換」
先頭の0を削除するかどうか、桁数の多い数値を指数表記にするかどうかなどを、個別に切り替えられます。項目が見当たらなければ、お使いのバージョンには入っていません。永続ライセンス版には無い場合があります。
止められる範囲はバージョンによって違います。設定したら、実際に自分の困っているファイルで確かめてください。 設定を入れたつもりで変換され続けている、というのがいちばん危ない状態です。
ここが重要です。変換はファイルを開いた時点で完了しています。
日付になった「1-2」は、Excelの中では日付を表す数値になっています。2026年に開いたなら 46024 です。ここでセルの書式を「文字列」に変えても、表示されるのは 46024 であって、元の 1-2 ではありません。変換前の文字列はもう残っていません。
Ctrl+Z でも戻りません。取り消せるのは自分がした操作だけで、読み込み時の変換は対象外です。
そして変換された状態で上書き保存すると、CSVの中身も書き換わります。 元のデータは失われます。
対処は一つだけです。元のCSVをもう一度取得し直してください。 ダウンロードし直す、送り主にもらい直す。それが唯一確実な方法です。