ExcelのCSV文字化けを3秒で直す方法
最終更新: 2026年3月20日 ・ 読了時間: 約5分
「CSVファイルをExcelで開いたら文字化け…」これはおそらく日本のオフィスで最も多いファイルトラブルです。 原因はシンプルで、UTF-8で保存されたCSVをExcelがShift_JISとして開いてしまうことにあります。 この記事では原因の詳細と、確実な解決策を紹介します。
なぜ文字化けが起きるのか
CSVファイルには「このファイルはUTF-8です」という情報が含まれていません。 テキストファイルはバイト列の羅列であり、どのエンコーディングで書かれたかを示す 標準的なメタデータが存在しないのです。
ExcelはCSVを開く際に、OSのデフォルトエンコーディングを使います。 日本語WindowsのデフォルトはShift_JIS(コードページ932)であるため、 UTF-8のCSVをShift_JISとして解釈し、文字化けが発生します。
文字化けのパターン
| 元のテキスト | 文字化け後 | 原因 |
|---|---|---|
| 東京都渋谷区 | 譚ア莠ャ驛ス貂峨き蜍? | UTF-8 → Shift_JIS 誤認 |
| 山田太郎 | 蟆冗判螟ェ驛? | UTF-8 → Shift_JIS 誤認 |
| ¥1,000 | Â¥1,000 | UTF-8バイトの誤解釈 |
解決策①: tools24.jp で一瞬修復(最も簡単)
- 文字化け修正ツールを開く
- 文字化けしたCSVファイルをドラッグ&ドロップ
- 自動でエンコーディングを判定 → UTF-8(BOM付き)でダウンロード
- ダウンロードしたCSVをExcelで開く → 文字化けなし
※ ブラウザ内で処理されるため、CSVの内容がサーバーに送信されることはありません。
解決策②: BOM付きUTF-8で保存する
BOM(Byte Order Mark)とは、ファイルの先頭に付加される3バイトのマーカー(EF BB BF)です。 ExcelはBOMを検出するとUTF-8として正しくファイルを開きます。
プログラムからCSVを出力する場合
Python
with open('output.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)utf-8-sig を指定すると自動的にBOMが付加されます。
JavaScript / Node.js
const BOM = '\uFEFF';
fs.writeFileSync('output.csv', BOM + csvContent, 'utf8');PHP
header('Content-Type: text/csv; charset=UTF-8');
echo "\xEF\xBB\xBF"; // BOM
echo $csvContent;解決策③: Excelの「データの取得」機能を使う
Excel 2016以降では、「データ」タブ →「テキストまたはCSVから」を使うと、 エンコーディングを自動判定(またはプレビューで確認)してからインポートできます。 ただし、ダブルクリックでCSVを開く場合はこの機能は使われないため、注意が必要です。
予防策: 今後文字化けを防ぐには
- CSVを生成する側 — BOM付きUTF-8で出力するのがベスト。 受け取り側がExcelユーザーである可能性が高い日本の業務環境では、BOM付きが事実上の標準です。
- CSVを受け取る側 — ダブルクリックで開かず、 Excelの「データの取得」からインポートするか、Google スプレッドシートで開いてからExcel形式で保存。
- HTMLからのダウンロード — JavaScriptでCSVを生成してダウンロードさせる場合、 BlobのBOM付加を忘れないこと。
new Blob(['\uFEFF' + csv])が確実です。
まとめ
ExcelのCSV文字化けは「UTF-8 vs Shift_JIS」のエンコーディング不一致が原因です。 最も簡単な解決策はtools24.jpの文字化け修正ツールでBOM付きUTF-8に変換すること。 プログラムからCSVを出力する場合は、最初からBOM付きUTF-8で保存しておけば、受け取り側で文字化けが起きません。
関連ガイド
- 全角・半角変換の基礎知識 — CSVデータの全角半角混在問題を解決
- WebP画像でサイト速度とSEOを改善する方法 — ファイルフォーマットの最適化テクニック