結論:まず「文字コード」、次に「区切り文字」と「Excelの自動変換」を疑う
CSVをExcelで開いたら文字化けした、システムに取り込めない、というときの原因は、多くの場合「文字コード」の食い違いです。文字化けしていないのに列がずれる・数字が変わるときは、「区切り文字」や「Excelが値を自動で変換していること」を確認しましょう。原因を1つずつ切り分けると、直し方が分かります。
原因を整理する
- 文字コードの違い:CSVは文字だけのファイルですが、保存する方式(文字コード)が複数あります。日本では、古くからWindowsで使われてきたShift_JISと、今の標準的なUTF-8がよく使われます。開く側が違う文字コードだと思って読むと、文字化けします。
- BOMの有無:UTF-8には、先頭に「BOM」という目印を付けるかどうかの違いがあります。Microsoftの案内では、BOM付きのUTF-8で保存されたCSVはExcelでそのまま開けますが、BOMがない場合は「データ」タブから取り込む方法が紹介されています。
- 区切り文字の違い:カンマ区切りのはずが、タブやセミコロンで区切られていると、1列にまとまったり列がずれたりします。
- Excelの自動変換:Microsoftによると、Excelは数値に見える値を自動で数値に変換するため、「00123」のような番号は先頭の0が消えます。また、Excelで扱える数値の桁数は15桁までで、16桁以上の数字は15桁を超えた部分が0に置き換わります。
直し方の手順
- 文字コードを確かめる:どの文字コードで保存されているかを調べます(下のツールで自動判定できます)。
- Excelで開くなら、BOM付きUTF-8にする:BOM付きにすると、ダブルクリックで開いても文字化けしにくくなります。
- ファイルを変えずに読み込むなら「データ」タブから:「データ」タブの「テキスト/CSVから」(「データの取得」→「ファイルから」の中にある場合もあります)で読み込む方法が、BOMなしのUTF-8のCSVを開く方法としてMicrosoftの案内で紹介されています。
- 先頭の0を残したい列は「テキスト」として読み込む:「テキスト/CSVから」で読み込むときに、プレビューで編集を選んでクエリエディターを開き、対象の列のデータ型を「テキスト」に変えてから読み込みます。
- 古いシステムに渡すなら、Shift_JISにする:取り込み先がShift_JISしか読めない場合は、変換してから渡します。
- 区切り文字をそろえる:取り込み先が指定する区切り(カンマ・タブなど)に変換します。
注意点
- Shift_JISで表せない文字がある:絵文字や一部の漢字(「𠮷」(つちよし)など)はShift_JISにないため、変換すると「?」などに置き換わります。変換後に中身を確認しましょう。
- 自動変換された値はそのまま保存される:Excelで開いた時点で先頭の0が消えたり桁が丸められたりしていると、そのまま保存すれば変わった値で残ります。編集する前に、元のファイルのコピーを取っておきましょう。
- 自動変換の設定:Microsoft 365/Excel 2024では、「ファイル」→「オプション」→「データ」→「自動データ変換」で、先頭の0を削除する変換などを個別にオフにできます。
このサイトのツールの使い方
- 「CSV文字コード変換」:Shift_JIS・UTF-8・EUC-JPを自動で見分け、「UTF-8(BOM付き・Excel向け)」「UTF-8(BOMなし)」「Shift_JIS」「EUC-JP」に変換します。改行コード(CRLF・LF)もそろえられます。複数のファイルをまとめて変換でき、変換先の文字コードにない文字があれば、その文字を表示して知らせます。
- 「Excel・CSV変換」:.xlsxのシートをCSV(文字コードを選択)やJSONにします。日付の書式のセルを「2024-01-31」の形で書き出せます。逆に、CSVから.xlsxを作るときは、0で始まる番号を文字のまま入れられます。古い.xls形式には対応していません。
- 「CSV区切り文字変換」:カンマ・タブ・セミコロン・パイプ区切りを相互に変換します。元の区切りは自動で判定します。
- 「CSVの重複行削除」:取り込みエラーの原因が重複データのときに使います。重複を見分ける列を選び、前後の空白や全角・半角の違いを無視して比べることもでき、削除した行も一覧で確認できます。
どのツールも、ファイルをサーバーに送らず、端末の中だけで処理します。