取引先から届いたCSVをエクセルで開いたら、社名も住所も「譌・譛ャ隱槭ユ繧ケ繝」のような記号の羅列になっていた——この記事は、その状態を数分で元に戻すための手順書です。
ファイルを送り直してもらう前に試せる直し方を3つ、Microsoft の公式ヘルプで裏を取ったうえで、画面に出るメニュー名そのままで並べます。文字化けが直った後に残りがちな「先頭のゼロが消える」「電話番号が指数表記になる」もあわせて扱います。
まず確認する1つ:ファイルは壊れていない。読み方が違うだけ
CSVの文字化けは、ほぼすべてが文字コードの取り違えです。UTF-8で書かれたCSVを、エクセルがWindowsの既定の文字コード(ANSIコードページ)として読んでしまうために起きます。日本語版Windowsの既定はコードページ932(Shift-JIS)、UTF-8は65001で、Microsoft はこの2つを別の識別子として定義しています。
Microsoft のサポートは「UTF-8でエンコードされたCSVファイルは、BOM(バイト オーダー マーク)付きで保存されていれば通常どおり開ける」と明記し、BOMが無いファイルは[データ]タブから取り込むよう案内しています。つまり化けているのは表示だけで、ファイルの中身は壊れていません。送り直しを依頼する前に、読み方を指定して開き直せば戻ります。
実際に「日本語テスト,顧客名,住所」をUTF-8で書き、Shift-JISとして読ませると「譌・譛ャ隱槭ユ繧ケ繝,鬘ァ螳「蜷,菴乗園」になります。漢字と半角カタカナが混ざった、あの見慣れた化け方です。
直し方A:[データ]>[テキストまたは CSV から]で 65001 を指定する(最も確実)
ダブルクリックで開くのをやめ、文字コードを自分で指定して取り込む方法です。どのCSVでも通用するので、迷ったらこれを使ってください。
- エクセルで空のブックを開く。
- [データ]タブ>[データの取得と変換]グループの[テキストまたは CSV から]をクリックする。
- [データのインポート]ダイアログで対象のCSVを選び、[インポート]をクリックする。
- プレビュー画面上部の[元のファイル](ファイルの配信元)で「65001: Unicode (UTF-8)」を選ぶ。プレビューの日本語がその場で正しく表示されます。
- そのまま[読み込み]をクリックする。列の型を整えたい場合は[データの変換]へ進む。
この[元のファイル]は、Microsoft のヘルプで「テキスト ファイルで使用される文字セットを選択します」と説明されているドロップダウンです。重要なのは、Power Query の公式ドキュメントが「現在、文字セットは推論されず、UTF-8 は UTF-8 BOM で始まる場合にのみ推論されます」と明言している点です。BOMの無いUTF-8ファイルは、自動では判別されません。だからここで65001を手で選ぶ必要があるわけです。
※ 上記は Microsoft 365 版 Excel(Windows)の画面名です。Excel 2016 など古いバージョンでは[データ]タブ内の配置が異なります。昔ながらのテキスト インポート ウィザードを使いたい場合は、[ファイル]>[オプション]>[データ]で[レガシ データのインポート ウィザードを表示]の[テキストから (レガシ)]を有効にします。
直し方B:「UTF-8 (BOM 付き)」で保存し直す(ダブルクリックで開けるようになる)
同じCSVを何度も開く、あるいは他の人にも配る場合は、ファイル側にBOMを付けてしまうのが早いです。
BOMはファイルの先頭に付く目印で、UTF-8ではEF BB BF の3バイトです。Microsoft は「BOMはUTF-8でも使用できるが、その場合BOMは、UTF-8のストリームやファイルをASCIIのものと区別するための署名としてのみ使われる」と説明しています。この署名があると、エクセルは「このファイルはUTF-8だ」と判断できます。
- CSVファイルを右クリックし、[プログラムから開く]>[メモ帳]を選ぶ(この時点では化けたままで構いません)。
- [ファイル]>[名前を付けて保存]を選ぶ。
- ダイアログ下部の[エンコード]で「UTF-8 (BOM 付き)」を選ぶ。
- 同じファイル名で[保存]し、上書きする。
- 保存したCSVをダブルクリックで開く。文字が正しく表示されます。
メモ帳のエンコード選択肢は Windows 10(バージョン1903以降)と Windows 11 のものです。Visual Studio Code を使っている場合は、画面右下の文字コード表示をクリックし、[Save with Encoding]から[UTF-8 with BOM]を選べば同じことができます。
注意点が1つあります。メモ帳で開いた時点で文字化けして見えていても、そのまま保存して問題ありません。メモ帳が正しくUTF-8として読めていれば画面も正常に見えるはずで、もしメモ帳でも化けているなら、そのファイルはUTF-8ではなく別の文字コードです。その場合は直し方Aに戻って、[元のファイル]で「932: 日本語 (シフト JIS)」など他のコードページを試してください。
直し方C:エクセルから出すときは[CSV UTF-8 (コンマ区切り)]を選ぶ
「自分が作ったCSVを相手のシステムに入れたら化けた」という逆向きのトラブルは、保存時の形式選択で解決します。
- [ファイル]>[名前を付けて保存]を選ぶ。
- 保存場所を選び、[ファイル名]を入力する。
- [ファイルの種類]のドロップダウンで[CSV UTF-8 (コンマ区切り)]を選ぶ。
- [保存]をクリックする。「現在のワークシートのみが保存されます」という確認が出たら[OK]を選ぶ。
ここで[CSV (コンマ区切り)]を選ぶと、Shift-JIS側のファイルができます。Microsoft の一覧では[CSV (コンマ区切り)]は「Windows オペレーティング システムで…文字が正しく解釈されるコンマ区切りのテキスト ファイル」と説明されており、その「Windows の解釈」が日本語環境ではコードページ932です。Webサービスや基幹システムの多くはUTF-8を前提にしているため、ここを間違えると相手側で化けます。似た名前の2つを取り違えないことが、この項目のすべてです。
なお、テキスト形式で保存するとセルの色・罫線・数式などの書式はすべて失われます。元のブックは.xlsxのまま残し、CSVは受け渡し用の書き出しとして扱ってください。
化け方で原因を見分ける切り分け表
画面に出ている文字の「壊れ方」を見れば、どの直し方に進むべきかが決まります。
症状(画面の見え方) | 原因 | 直し方 |
|---|---|---|
譌・譛ャ隱槭ユ繧ケ繝 のように、漢字と半角カタカナが混ざった文字列になる | UTF-8のファイルをShift-JIS(932)として読んでいる | 直し方A(65001を指定)または直し方B(BOMを付ける) |
���{�� のように「�」や「?」ばかりが並ぶ | Shift-JISのファイルをUTF-8として読んでいる(スプレッドシートやテキストエディタ側で起きやすい) | 取り込み側の文字コードを932(Shift-JIS)に指定して読み直す |
1行目の先頭だけに  や が付き、他は正常 | BOMが付いたUTF-8を、BOM非対応の読み方で開いている | 取り込み側をUTF-8(BOM付き)対応にする。無理ならBOMを外して保存し直す |
ほとんど正常だが、一部の文字だけ □ や ? になる | 文字コードではなくフォント未対応・環境依存文字(丸囲み数字、旧字体など) | フォントを変更する。それでも出ないなら常用の文字に置き換える |
文字は正しいが、0120… の先頭のゼロが消える/1.23E+11 になる/1-1 が 1月1日 になる | 文字コードの問題ではなく、取り込み時の列の自動変換 | 下の「文字化けが直っても残る崩れ」へ |
上の2行を取り違えないでください。「漢字が並ぶ化け方」と「?が並ぶ化け方」は、原因が正反対です。前者はUTF-8を古い読み方で開いたとき、後者はShift-JISを新しい読み方で開いたときに出ます。
文字化けが直っても残る崩れ(先頭のゼロ・指数表記・勝手な日付)
文字は直ったのに、電話番号の先頭のゼロが消えている、注文番号が 1.23457E+14 になっている——これは文字コードとは別の問題で、エクセルが列の中身を数値や日付として解釈しているために起きます。Microsoft のヘルプも、CSVを開くと「現在の既定のデータの書式設定を使用して、データの各列をインポートする方法を解釈します」と説明し、先頭のゼロを維持したい場合はウィザードまたは接続してインポートする方法を案内しています。
直し方Aの途中で[読み込み]ではなく[データの変換]を選び、列の型を先に決めてしまうのが確実です。
- [テキストまたは CSV から]のプレビューで、一番右のドロップダウンから[データ型を検出しない]を選ぶ(全列がテキストとして読み込まれます)。
- または[データの変換]をクリックし、Power Query エディターで対象の列を選ぶ。
- [ホーム]>[データ型]>[テキスト]を選ぶ。
- [列タイプの変更]の確認で[現在のものを置換]を選ぶ。
- [閉じて読み込む]でシートに取り込む。
すでに数値として読み込まれてしまった列を後から書式だけ「文字列」に変えても、消えたゼロは戻りません。取り込みの時点で決めるのが唯一の対策です。逆に、数値として計算したいのに文字列で入ってしまった場合はエクセルで数値が文字列扱いになるときの直し方を、「1-1」や「2-3」が勝手に日付になる現象はエクセルで勝手に日付に変換される原因と止め方を参照してください。
ちなみに、エクセルがインポート・エクスポートできるのは最大で1,048,576行・16,384列までです。これを超える明細を毎月CSVでやり取りしているなら、そもそもファイルの受け渡しという方法自体が限界に来ています。
どうしても開けないときはGoogle スプレッドシート経由で開く
エクセルのバージョンが古い、権限の都合でPower Queryが使えない、といった場合の回避策です。スプレッドシートはインポート時に区切り文字を自動検出するため、文字コードの指定に悩まず開けることがあります。
- Google スプレッドシートで空のファイルを新規作成する。
- [ファイル]>[インポート]をクリックする。
- [アップロード]タブから対象のCSVを選ぶ(.csv、.txt、.tsv などに対応しています)。
- [区切り文字]で[自動的に検出]または[カンマ]を選ぶ。
- [新しいスプレッドシートを作成する]など、インポート場所を選んで実行する。
- 文字が正しく表示されたら、[ファイル]>[ダウンロード]からExcel形式を選んで保存する。
ただし取引先の個人情報や契約データを、個人のGoogleアカウントにアップロードしないでください。会社として管理しているアカウント・共有ドライブで行う、というルールだけは先に決めておく必要があります。なお、スプレッドシート側で保存が通らない・同期エラーが出る場合は、文字コードとは別の原因です。「変更内容を同期できません」と出るときの対処にまとめています。
再発防止:直すのではなく、出力側の文字コードを揃える
ここまでは「届いてしまった化けたCSVを直す」話でした。毎月同じ作業を繰り返しているなら、直すのをやめて出口を固定するほうが確実に安く済みます。
- 出力側に一言お願いする:CSVを出しているシステムの担当者に「UTF-8(BOM付き)で出力してほしい」と伝えるだけで、以後の作業がゼロになることがあります。管理画面に文字コードの選択肢が用意されているサービスも多くあります。
- 手順をファイルに残す:直し方Aで[データの変換]まで進むと、その取り込み手順がクエリとしてブックに保存されます。翌月は同じ場所にファイルを置いて[更新]を押すだけで済み、担当者が代わっても同じ結果になります。
- 開いて直して貼り直す、をやめる:文字化けを毎回手で直している作業は、実質的に同じデータを二度入力しているのと変わりません。考え方はエクセルの二重入力をなくす方法に書いたとおりで、人が介在する回数を減らすほど事故が減ります。
もう一つ、意外に多いのが「CSVを取り込んだ後の集計表が更新されない」という相談です。文字コードとは無関係に、再計算の設定や参照範囲が原因であることが大半なので、エクセルの数式が計算されないときの原因もあわせて確認してみてください。
私たちはこういうサービスも行っております。記事の途中で恐縮ですが、CSVの受け渡しそのものを無くしたい・スプレッドシートで回している業務を入力画面ごと作り直したい、という段階であれば、よろしければ合わせてご覧いただけたら嬉しいです。
よくある質問
CSVをダブルクリックで開くと必ず文字化けします。設定で直せますか?
エクセル側の設定で常に直す方法はありません。UTF-8のCSVでもBOM付きなら通常どおり開けるとMicrosoftが案内しているため、BOMを付けて保存し直すのが最も手軽です。BOMを付けられない場合は、データタブのテキストまたはCSVからで65001:Unicode(UTF-8)を指定して取り込んでください。
BOMとは何ですか。付けると何か困ることはありますか?
BOMはファイルの先頭に置く目印で、UTF-8では EF BB BF の3バイトです。MicrosoftはUTF-8のBOMについて、ASCIIのファイルと区別するための署名として使われると説明しています。困るのは受け取り側がBOMに対応していない場合で、1行目の先頭に余計な文字が入って見えます。その場合はBOMなしで渡し、相手には文字コードを伝えてください。
CSV(コンマ区切り)とCSV UTF-8(コンマ区切り)は何が違いますか?
保存される文字コードが違います。CSV UTF-8(コンマ区切り)はUTF-8で保存され、CSV(コンマ区切り)はWindowsの既定の文字コードで保存されます。日本語版WindowsのANSIコードページは932(Shift-JIS)です。Webサービスや基幹システムへ取り込むならCSV UTF-8を選んでください。
文字化けは直ったのに、電話番号の先頭のゼロが消えます。
文字コードではなく列の自動変換が原因です。Microsoftのヘルプも、先頭のゼロを維持したい場合はウィザードまたは接続してインポートする方法を使うよう案内しています。テキストまたはCSVからのプレビューでデータ型を検出しないを選ぶか、データの変換に進んで対象列のデータ型をテキストに変えてから読み込んでください。
同じCSVを毎月取り込みます。毎回この作業が必要ですか?
必要ありません。データの変換まで進んで取り込むと、その手順がクエリとしてブックに保存されます。翌月は同じ場所にファイルを置いて更新を押すだけで同じ結果になり、担当者が代わっても手順がぶれません。
文字化けの直し方はここまでですが、そもそもCSVを毎月手で受け取って直している状態なら、受け渡しの形そのものを見直す余地があります。現状を伺ったうえで、現実的なところをお伝えします。