目次を開く
CSVの中では 10-10 や JAN1 だった値が、Excelで開いた瞬間に日付へ変わることがあります。社員コード、外部ID、商品コードのように「日付ではない文字列」なら、これは表示の違いではなく別の値として解釈された事故です。
最初にやることは、Excel上で書式を直すことではありません。元CSVに文字列が残っているか確認してから、Excel側の自動変換を止めることです。
まず元CSVをテキストで確認する
Excelを閉じた状態で、CSVをテキストエディタで開きます。
external_id,name
10-10,Sato
JAN1,Tanaka
ここで 10-10 や JAN1 がそのままなら、元CSVはまだ生きています。Excelが読み込み時に意味を付け替えている可能性が高い状態です。
逆に、元CSV自体がすでに 2026/10/10 のように書き換わっているなら、Excelの設定だけでは戻せません。変換前のデータを取り直す方が安全です。
Excelの自動データ変換を止める
Microsoftは、Excelの自動データ変換で、文字と数字の連続した値を日付へ変換する場合があると案内しています。Microsoft 365やExcel 2024では、自動データ変換の設定からこの挙動を無効にできます。
Windowsでは ファイル → オプション → データ、MacではExcelの設定内にある自動データ変換関連の項目を確認します。
「連続した文字と数字を日付へ変換する」類の変換を無効にしておくと、JAN1 のような値を文字列のまま扱いやすくなります。
ただし、設定を変える前に一度開いて変換済みの値は、その場で書式を「文字列」に変えるだけでは元の内容へ戻らない場合があります。
CSVはダブルクリックせず「テキスト/CSVから」取り込む
別の方法は、CSVを直接開かずにExcelの取り込み機能を使うことです。
- Excelを先に開く
- データタブを選ぶ
- テキスト/CSVからを選ぶ
- 対象ファイルを指定する
- プレビューで列の内容を確認する
- 必要な列を文字列として扱う
Microsoftのサポートでも、CSVを直接開くとExcelの既定データ形式で列が解釈されるため、列ごとに形式を制御したい場合はインポート機能を使う方法が案内されています。
外部ID、SKU、郵便番号、口座番号のような列は、計算する数字ではなく識別子です。見た目が数字や日付に似ていても、意味が文字列なら文字列として取り込む方が安全です。
書式を変えるだけでは足りない理由
Excelで 10-Oct と表示された後にセルの表示形式を「文字列」に変えても、内部ですでに日付シリアル値へ変換されていれば、元の 10-10 が自動で復元されるわけではありません。
同じことは先頭0や16桁以上の番号でも起きます。Excelが読み込み時に値を数値として解釈すると、表示を後から整えても元データと同じとは限りません。
ExcelがCSVの先頭0を消す場合も、考え方は同じです。開いた後に直すより、変換させずに取り込む方が安全です。
本番投入前に別のCSV崩れも確認する
日付への自動変換はExcel側の問題ですが、CSVそのものにも別の事故があります。
- 必須値の空欄
- 重複行
- ヘッダー名の重複
- 行ごとの列数不一致
- 引用符の崩れ
これらは見た目だけでは気づきにくいことがあります。別システムへ投入する直前にまとめて確認したい場合は、CSV PreflightをUS$3で使うと、元CSVを外部へ送らずローカルで事前点検できます。
まとめ
CSVの 10-10 や JAN1 がExcelで勝手に日付へ変わるときは、まず元CSVに文字列が残っているか確認します。
元データが無事なら、Excelの自動データ変換を止めるか、データ → テキスト/CSVからで列の型を確認しながら取り込みます。
一度変換された後に表示形式だけ直すより、最初から文字列として読み込む。これが一番安全な切り分けです。