目次を開く
CSVに 00123 と入っているのに、Excelで開いたら 123 になった。
これは見た目だけの問題ではありません。郵便番号、社員ID、顧客コード、SKU、口座番号などでは、先頭の0を失うと別の値になります。CSVを別システムへ戻す前に止めたい事故です。
Microsoftも、Excelが数値として解釈したテキストから先頭のゼロを削除する場合があると案内しています。対処は、自動データ変換を止めるか、取り込み時に対象列をテキストとして扱うことです。
まず元CSVに0が残っているか確認する
最初に、ExcelではなくテキストエディタでCSVを開きます。
employee_id,name
00123,Sato
00456,Tanaka
ここで 00123 のままなら、元CSVはまだ壊れていません。Excelが表示・読み込み時に 123 と解釈している可能性があります。
逆に、テキストエディタで見ても 123 なら、すでにどこかの保存工程で0が失われています。Excel側の表示設定だけでは元に戻せません。
Microsoft 365 / Excel 2024なら自動データ変換を止める
Microsoft 365とExcel 2024では、自動データ変換の設定で「先頭のゼロを削除して数値に変換する」動作を無効にできます。
WindowsではExcelのオプション、MacではExcelの設定から自動データ変換を探します。バージョンによって表記位置は異なりますが、対象は先頭のゼロを削除して数値へ変換する設定です。
これを無効にすると、00123 を数値の 123 へ変換せず、文字列として保持できます。
CSVを安全に開くなら「テキスト/CSVから」
設定を変えたくない場合や、列ごとに型を決めたい場合は、CSVをダブルクリックで開かずに取り込みます。
- Excelを開く
- データを選ぶ
- テキスト/CSVからを選ぶ
- CSVを指定する
- 変換画面でID・郵便番号・SKUの列を選ぶ
- データ型をテキストへ変更する
- 値が
00123のままか確認して読み込む
Microsoftの案内でも、Power Queryの取り込み時に対象列をテキスト型へ変換する方法が紹介されています。
セルの表示形式だけ直してもCSVは安全にならない
Excelでユーザー定義の表示形式を 00000 にすると、見た目だけ 00123 にできます。
ただしこれは、セル内部の値が 123 のままでも成立する表示方法です。CSVとして保存して別システムへ渡す用途では、見た目が5桁だから安全とは限りません。
郵便番号や社員IDのように「0を含めた文字列そのもの」が値なら、列をテキストとして保持する方が安全です。
16桁以上のIDも同じ場所で事故る
先頭0だけではありません。
Excelは長い数値を数値として扱うと、15桁を超える部分を保持できず、指数表記へ変換する場合があります。商品コード、注文ID、外部サービスの識別子など、計算しない番号は最初からテキストとして扱う方が事故を減らせます。
000123456789012345 のような値は「数字だけでできた文字列」です。数学の数値ではありません。
Excelで開いて保存する前に見る3点
CSVを受け取ったら、最低限ここだけ確認します。
- 先頭0が必要な列がないか
- 16桁以上のID列がないか
- 日付や
1E10のような文字列が自動変換されていないか
Excelで一度開いて、そのまま保存してしまうと、元CSVへ変換結果を書き戻すことがあります。元ファイルを残して別名保存してから作業する方が安全です。
まとめ
CSVの 00123 がExcelで 123 になるなら、まず元CSVに0が残っているか確認します。
残っているなら、Microsoft 365 / Excel 2024では自動データ変換を無効にするか、データ → テキスト/CSVからで対象列をテキストとして取り込みます。
表示形式だけで0を足すのではなく、ID・郵便番号・SKUは文字列として保持する。これが一番壊れにくい方法です。
CSVを別システムへ投入する前に、列数・重複・必須値・引用符崩れもまとめて確認するなら、CSV PreflightをUS$3で使うと元CSVを変更せずに事前チェックできます。