CSVを開くと文字化け・0落ち・日付に化ける。原因を切り分ける3つのチェック

記事
IT・テクノロジー
取引先や基幹システムから受け取ったCSVをExcelで開いたら、文字が化けていた。伝票番号の先頭の0が消えていた。日付のはずの列が違う日付に変わっていた──これらは別々の不具合に見えて、原因の切り分け方はだいたい同じです。コードを書く前に確認したい3つのポイントをまとめました。

■1. 文字コードは「Shift-JIS」か「UTF-8」か

Excelでダブルクリックして開いたCSVが文字化けする場合、多くはファイルの文字コード(Shift-JISかUTF-8か)とExcelの想定が食い違っています。ダブルクリックではなく「データ」タブ→「テキストまたはCSVから」で読み込み、プレビュー画面で文字コードを切り替えて正しく表示される方を選ぶと、化けずに読み込めることがあります。VBAでCSVを扱っている場合も、読み込み処理側の文字コード指定を疑ってください。

■2. 「0落ち」は列の書式が原因

伝票番号や郵便番号の先頭の0が消えるのは、Excelがその列を「数値」として自動認識し、先頭の0を切り捨てるためです。ダブルクリックで開くと防げないので、上記と同じ「テキストまたはCSVから」の読み込み画面で、該当列の書式を「文字列」に指定してから読み込むと0が残ります。すでに0落ちしたファイルは、元のCSVから読み込み直す以外に復元する方法がない点に注意してください。

■3. 日付が化けるのは「自動変換」が原因

「3-1」のような文字列を日付だとExcelが自動で判断し、意図しない日付に変換してしまうケースです。品番やコード類が数字と記号だけで構成されていると起きやすい不具合です。対策は0落ちと同じで、読み込み時にその列の書式を「文字列」に指定することです。すでに変換された後のファイルからは元の値を復元できないため、原本のCSVが残っているかを先に確認してください。

■それでも直らないとき

読み込み設定を変えても化ける、VBAで自動処理している途中で崩れる、といった場合は、エラー文やサンプルの列構成(匿名化可)だけで原因を切り分ける単発の診断サービスをやっています。ファイルの実物を送っていただく必要はないので、社外に出せないデータを扱っている方でも相談しやすい形にしています。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す