業務でCSVを扱っていると、
CSVでは正しかったのに、Excelで開いたら値が変わった
ということがあります。
たとえば、こんなデータです。
| CSVの値 | Excelで起こりうること |
|---|---|
00123 |
123 になる |
2026-10-03 |
日付として扱われる |
1234567890123456 |
桁が変わる、指数表記になる |
1E10 |
数値として解釈される |
=ABC123 |
数式として扱われる可能性がある |
CSVそのものが壊れているわけではありません。
原因は、CSVには「この列は文字列」というセル型の情報がないことです。
ExcelはCSVを開くとき、各セルの内容を見て、
- 数値
- 日付
- 時刻
- 指数表記
- 数式
などを自動的に判断します。
普段は便利な機能ですが、商品コードや社員番号、注文番号など、
「数字に見えるけれど、文字列として扱いたいデータ」
では困ることがあります。
先頭の0が消える
たとえばCSVに次の値が入っているとします。
code,name
00123,商品A
00045,商品B
人間にとって 00123 は5文字のコードです。
しかしExcelが数値だと判断すると、
00123 → 123
として扱われます。
この状態でExcelから保存してしまうと、元の 00123 を復元できなくなる場合があります。
特に注意したいのは、
- 商品コード
- 社員番号
- 会員番号
- 郵便番号
- 各種管理番号
などです。
これらは数字だけで構成されていても、計算するための「数値」とは限りません。
日付に勝手に変換される
たとえば、
2026-10-03
という文字列は、Excelから見ると日付に見えます。
本当に日付なら問題ありません。
しかし、
1-2
3-4
10-11
のような文字列を分類コードや管理番号として使っている場合でも、Excel側の判断によって日付として解釈されることがあります。
見た目が似ていても、内部では元の文字列とは別のデータになっている可能性があります。
長いIDは特に注意
たとえば、
1234567890123456
のような長い番号です。
Excelの数値は、有効桁数に制限があります。
そのため長いIDを数値として読み込ませると、末尾が変わったり、指数表記になったりすることがあります。
これは、
- 注文ID
- 顧客ID
- 伝票番号
- システム間連携用ID
- 各種コード
などで問題になります。
こうした値は数字だけでできていても、実態は
数字で構成された識別子
です。
計算するための数値とは分けて考えた方が安全です。
1E10 のような文字も数値になる
CSVに、
1E10
という値が入っている場合も注意が必要です。
Excelでは E を使った表記を指数表記として解釈するため、文字列として保存したかったコードが数値として扱われることがあります。
識別コードに英数字を使用するシステムでは、こうしたケースもあります。
= から始まる値にも注意
CSVには、
=ABC123
のような値が入ることもあります。
Excelでは = から始まるセルを数式として扱うため、単なる文字列として保存したかった値が意図しない解釈をされる可能性があります。
外部から受け取ったCSVを扱う場合は、値そのものだけでなく、
Excelがその値をどう解釈するか
も意識する必要があります。
対策1:CSVをダブルクリックで開かない
一番確実なのは、CSVを直接ダブルクリックして開くのではなく、Excelのインポート機能を使う方法です。
Excelの「データ」からCSVを取り込むと、列ごとにデータ型を確認・指定できます。
たとえば、
商品コード → 文字列
注文ID → 文字列
数量 → 数値
金額 → 数値
日付 → 日付
というように扱います。
きちんとデータ加工を行う場合には、この方法が適しています。
対策2:CSVの値を文字列としてXLSXへ変換する
もう一つの方法は、
CSVに書かれている値を勝手に型変換せず、そのままExcel形式へ保存する
ことです。
たとえば、
00123
2026-10-03
1234567890123456
1E10
を、すべて文字列セルとしてXLSXへ保存します。
そうすればExcelで開いたあとも、
00123
2026-10-03
1234567890123456
1E10
という元の文字列を保持できます。
ただし、この方法にはトレードオフがあります。
数値に見える値も文字列として保存されるため、金額や数量など、実際に計算したい列については変換後にExcel側で数値へ変更する必要があります。
「数字に見える文字列」と「数値」は別物
CSVを扱うときは、ここを分けて考えると分かりやすいです。
00123
商品コードなら文字列です。
123
商品の数量なら数値です。
見た目はどちらも数字ですが、用途が違います。
Excelの自動判定は見た目から推測するため、業務上の意味までは判断できません。
だからこそ、
どの列を文字列として守るのか
を人間側で決める必要があります。
元のCSVは残しておく
これも重要です。
ExcelでCSVを開いて値が変わったあと、そのまま上書き保存してしまうと、元の情報が失われる場合があります。
そのため、
- システムから出力した元CSVを残す
- コピーしたファイルで作業する
- 変換後のデータを確認する
という流れにしておくと安全です。
特にIDやコードを含むCSVでは、元ファイルを残しておくことをおすすめします。
毎回確認するのが面倒だったのでツールを作った
こうしたCSVを扱いやすくするために、ブラウザ上でCSVを確認してXLSXへ変換する小さなWebツールを作りました。
サンプルCSVも用意しているので、手元の業務ファイルを使わなくても試せます
CSV to Excel Safe
主な目的は、
- 先頭ゼロ付きの値
- 日付に見える文字列
- 長い数字
- 指数表記に見える値
- 数式として解釈されそうな値
を確認しながら、元の文字列を保持したXLSXへ変換することです。
入力したファイルの解析・変換はブラウザ内で行い、ファイル内容をUtiloopのサーバーへ送信しない構成にしています。
無料・登録不要です。
なお、このツールは
「Excelで計算しやすい状態へ自動変換する」
ことではなく、
「まず元のCSVに書かれていた値を壊さない」
ことを優先しています。
そのため、出力したXLSXでは基本的にセルを文字列として保持します。
数量や金額など計算に使う列だけ、必要に応じてExcel上で数値へ変更してください。
まとめ
CSVをExcelで開いたときに値が変わるのは、CSVが壊れているからとは限りません。
CSVにはセルの型情報がないため、Excelが内容を見て自動的に型を判断することが原因になる場合があります。
特に注意したいのは、
- 先頭ゼロ付き番号
- 日付に見えるコード
- 長いID
- 指数表記に見える文字列
- 数式として認識される文字列
です。
対策としては、
Excelのインポート機能で列型を指定する
または、
文字列としてXLSXへ変換してからExcelで扱う
方法があります。
業務データを扱うときは、
「数字に見えるもの」と「計算するための数値」は別物
と考えておくと、CSVによる事故をかなり減らせます。