みなさん、こんにちは。
日本語を含むCSVファイルをExcelで開いたときに文字化けしてしまい、困った経験はありませんか?
特にMacユーザーの方なら、Numbersで作成したCSVがExcelでなぜか文字化けしてしまう、という状況に直面したことがあるかもしれませんね。
今回は、なぜExcelでCSVファイルが文字化けしてしまうのか、その原因と対処方法を解説していきます。さらに、CSVファイルをUTF-8で正しく保存する方法や、開発者向けにPythonでのCSV出力例も紹介します。
なぜExcelでCSVが文字化けするの?
原因はシンプルです。Excelが文字コードを誤って認識するためです。
CSVファイルは非常にシンプルなテキストファイルで、文字コード(エンコーディング)情報を内部に持ちません。
ExcelはCSVファイルを開くとき、自動的に「Shift_JIS(CP932)」と判断して読み込もうとします。
一方、最近のアプリケーションやシステムでは、UTF-8が主流です。表計算ソフトでいえば、NumbersやLibreOffice Calcでは、CSVファイルはUTF-8で保存されます。
このギャップにより、UTF-8で保存されたCSVファイルをExcelが誤ってShift_JISで読み込み、日本語が文字化けするという問題が発生します。
対処方法
方法1:Excelの「データの取得」でUTF-8指定して読み込む(推奨)
Excel 2016以降を使っているなら、この方法がもっとも確実です。
手順:
- Excelを起動し、空白のブックを開く
- メニューの「データ」タブをクリック
- 「データの取得」 > 「ファイルから」 >「テキストまたはCSVから」を選択
- 対象のCSVファイルを選んでインポート
- 表示されたウィンドウで、「元のファイル」を「65001: Unicode (UTF-8)」に変更
- 「読み込み」をクリック
これで文字化けせずに正しく読み込めます。
方法2:テキストエディタでUTF-8(BOM付き)として保存する
Excelは通常のUTF-8ファイルをShift_JISと誤認識しますが、BOM(Byte Order Mark)付きUTF-8ファイルであればUTF-8として正しく認識する場合が多いです。
手順:
- CSVファイルをWindowsであればメモ帳で開く
- メニューの「ファイル」→「名前を付けて保存」を選択
- 「ファイルの種類」を「すべてのファイル」にし、ファイル名の拡張子を「
.csv
」とする - 「文字コード」を「UTF-8(BOM付き)」に設定(※BOM付きで保存されます)
- 保存

保存したファイルをExcelで開くと、文字化けせずに日本語が正しく表示されるはずです。
注意点:この方法は避けましょう
- エクスプローラーから CSVファイルをダブルクリックして開く方法 は、Excelが自動的にShift_JISと判定してしまうため、文字化けの原因になります。
必ず「データの取得」や「メモ帳保存」などの方法を使いましょう。
CSV出力プログラムを開発する方向け – PythonでUTF-8(BOM付き)で出力する方法
アプリケーションやスクリプトでCSVを自動生成する場合、UTF-8(BOM付き)で保存することでExcelとの互換性を高められます。
Pythonでのサンプルコード:
import csv
# BOM付きUTF-8でCSVファイルを保存する
with open("output.csv", mode="w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(["名前", "年齢", "所属"])
writer.writerow(["山田太郎", 30, "営業部"])
writer.writerow(["鈴木花子", 25, "開発部"])
ポイントは encoding="utf-8-sig"
を指定することです。
これにより、Excelでも正しく読み込めるBOM付きUTF-8ファイルが生成されます。
まとめ
最後に、文字化けを回避するための方法を一覧表にまとめました。
方法 | メリット | 対応環境 |
---|---|---|
ExcelからUTF-8指定で読み込む | もっとも確実な方法。データを一括で読み込め、文字化けを防げる | Excel 2016以降 |
メモ帳でBOM付きUTF-8保存 | ファイルをダブルクリックで開いても正しく表示されやすい | すべてのExcel |
Pythonでutf-8-sig形式で出力 | プログラムからCSV出力する際に最適。Excelとの互換性が高い | 開発用途 |
いずれの方法も、「ExcelがShift_JISを前提としてCSVを開く」という前提に対処するための手段です。
自分の作業環境や目的に応じて、最適な方法を選択してください。
本日も最後までお読みいただきありがとうございました。
それでは、よいExcelライフを!