ExcelからCSVに変換すると文字化けする理由
ExcelからCSVに変換する際、日本語が文字化けするのは非常によくある問題です。原因を理解すれば、確実に防ぐことができます。
文字化けの主な原因
| 原因 | 状況 | 結果 |
|---|---|---|
| エンコーディング不一致 | Shift_JISで保存→UTF-8で開く | 「繧ウ繝ウ繝励Μ繝シ繝医」のような文字化け |
| BOM(バイトオーダーマーク)なし | UTF-8で保存→Excelで開く | 日本語部分が文字化け |
| 改行コードの違い | Mac(LF)→Windows(CRLF) | 改行が認識されない |
| 区切り文字の問題 | セミコロン区切り→カンマ区切りで開く | 列がずれる |
Excel の CSV 保存形式の違い
Excel(Microsoft 365 / Excel 2019以降)には複数のCSV保存形式があります。
保存形式一覧
| 保存形式 | エンコーディング | BOM | 用途 |
|---|---|---|---|
| CSV UTF-8(コンマ区切り) | UTF-8 | あり | おすすめ — 多くのシステムで正しく読める |
| CSV(コンマ区切り) | Shift_JIS(Windows)/ UTF-8(Mac) | なし | 旧来のシステム向け |
| CSV(Macintosh) | Shift_JIS | なし | 古い形式。使用非推奨 |
| CSV(MS-DOS) | Shift_JIS | なし | 古い形式。使用非推奨 |
おすすめの保存形式
「CSV UTF-8(コンマ区切り)」を選びましょう。 これはUTF-8 BOM付きで保存されるため、ほとんどの環境で正しく日本語が表示されます。
正しい変換手順
Windowsの場合
方法1: Excel から直接保存(推奨)
- Excelでファイルを開く
- 「ファイル」→「名前を付けて保存」を選択
- ファイルの種類から 「CSV UTF-8(コンマ区切り)(*.csv)」 を選択
- 「保存」をクリック
方法2: メモ帳でエンコーディング変換
ExcelがShift_JISで保存してしまった場合:
- CSVファイルをメモ帳で開く
- 「ファイル」→「名前を付けて保存」を選択
- 文字コードで 「UTF-8(BOM付き)」 を選択
- 保存
方法3: PowerShellで一括変換
# Shift_JIS → UTF-8 BOM付き に変換
Get-Content -Path "input.csv" -Encoding Default |
Set-Content -Path "output.csv" -Encoding UTF8
macOSの場合
方法1: Excel for Mac から保存
- Excelでファイルを開く
- 「ファイル」→「名前を付けて保存」を選択
- ファイル形式から 「CSV UTF-8(コンマ区切り)(*.csv)」 を選択
- 「保存」をクリック
方法2: Numbers から変換
- NumbersでExcelファイルを開く
- 「ファイル」→「書き出す」→「CSV」を選択
- テキストエンコーディングで「Unicode(UTF-8)」を選択
- 「保存」をクリック
方法3: ターミナルで変換
# Shift_JIS → UTF-8 に変換
iconv -f SHIFT_JIS -t UTF-8 input.csv > output.csv
# BOM を付加
echo -ne '\xEF\xBB\xBF' | cat - output.csv > output_bom.csv
BOM(バイトオーダーマーク)について
BOMとは
BOM(Byte Order Mark)は、ファイルの先頭に付加される特殊なバイト列で、エンコーディングを示す目印です。
| エンコーディング | BOMのバイト列 |
|---|---|
| UTF-8 | EF BB BF |
| UTF-16 BE | FE FF |
| UTF-16 LE | FF FE |
BOM付きUTF-8のメリット・デメリット
| メリット | デメリット |
|---|---|
| Excelが正しくUTF-8として認識 | 一部のプログラムでBOMが文字化けする |
| 文字コード自動判定の精度が上がる | PHPなどでBOMが出力に混入することがある |
| Windows環境での互換性が高い | Unix系では不要とされることがある |
BOMはつけるべき?
- Excelで開く可能性がある → BOM付きにする
- プログラムで処理する → BOMなしが安全
- Webサーバーで配信する → BOMなしが推奨
よくあるトラブルと解決法
トラブル1: Excelで開くと数値が変わる
CSVの数値データをExcelで開くと、先頭の0が消えたり、大きな数値が指数表記になることがあります。
解決法: Excelの「データ」→「テキストファイルから」で、列のデータ形式を「文字列」に指定してインポートする。
トラブル2: 日付の形式が変わる
2026-03-31 が 3/31/2026 や 44651(シリアル値)になることがあります。
解決法: CSVを開く前にExcelのセルの書式設定を確認し、日付列の形式を指定する。
トラブル3: セル内改行が崩れる
CSVでセル内に改行がある場合、フィールドをダブルクォートで囲む必要があります。
名前,住所,備考
"田中太郎","東京都渋谷区
神南1-1-1","備考なし"
トラブル4: カンマを含むデータ
データ内にカンマが含まれる場合も、ダブルクォートで囲みます。
商品名,価格,説明
"ノートPC, 15インチ",150000,"高性能モデル"
Google スプレッドシートとの互換性
Google スプレッドシート → CSV
Google スプレッドシートからCSVをダウンロードすると、UTF-8(BOMなし) で保存されます。これをExcelで開くと文字化けします。
対策:
- ダウンロードしたCSVをテキストエディタで開く
- UTF-8 BOM付きで保存し直す
- Excelで開く
または、オンラインのCSV文字化け修復ツールを使う方が手軽です。
Excel → Google スプレッドシート
ExcelのCSV(Shift_JIS)をGoogleスプレッドシートにアップロードする場合は、自動的にUTF-8に変換されるため、通常は問題ありません。
プログラミング言語別のCSV出力
Python
import csv
with open('output.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer = csv.writer(f)
writer.writerow(['名前', '年齢', '住所'])
writer.writerow(['田中太郎', 30, '東京都'])
utf-8-sig を指定すると、BOM付きUTF-8で出力されます。
JavaScript(Node.js)
const fs = require('fs');
const BOM = '\uFEFF';
const csv = BOM + '名前,年齢,住所\n田中太郎,30,東京都\n';
fs.writeFileSync('output.csv', csv, 'utf8');
まとめ
ExcelからCSVへの変換で文字化けを防ぐポイント:
- UTF-8 BOM付きで保存する(「CSV UTF-8」形式を選択)
- 相手の環境が分からない場合はBOM付きが無難
- プログラムで処理する場合はBOMなしUTF-8
- Mac↔Windows間のやり取りは特にエンコーディングに注意
CSVの文字化けでお困りの場合は AssistyのCSV文字化け修復ツール をお試しください。ブラウザにドラッグ&ドロップするだけで、文字コードを自動検出してUTF-8に変換します。