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 から直接保存(推奨)

  1. Excelでファイルを開く
  2. 「ファイル」→「名前を付けて保存」を選択
  3. ファイルの種類から 「CSV UTF-8(コンマ区切り)(*.csv)」 を選択
  4. 「保存」をクリック

方法2: メモ帳でエンコーディング変換

ExcelがShift_JISで保存してしまった場合:

  1. CSVファイルをメモ帳で開く
  2. 「ファイル」→「名前を付けて保存」を選択
  3. 文字コードで 「UTF-8(BOM付き)」 を選択
  4. 保存

方法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 から保存

  1. Excelでファイルを開く
  2. 「ファイル」→「名前を付けて保存」を選択
  3. ファイル形式から 「CSV UTF-8(コンマ区切り)(*.csv)」 を選択
  4. 「保存」をクリック

方法2: Numbers から変換

  1. NumbersでExcelファイルを開く
  2. 「ファイル」→「書き出す」→「CSV」を選択
  3. テキストエンコーディングで「Unicode(UTF-8)」を選択
  4. 「保存」をクリック

方法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-8EF BB BF
UTF-16 BEFE FF
UTF-16 LEFF 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-313/31/202644651(シリアル値)になることがあります。

解決法: CSVを開く前にExcelのセルの書式設定を確認し、日付列の形式を指定する。

トラブル3: セル内改行が崩れる

CSVでセル内に改行がある場合、フィールドをダブルクォートで囲む必要があります。

名前,住所,備考
"田中太郎","東京都渋谷区
神南1-1-1","備考なし"

トラブル4: カンマを含むデータ

データ内にカンマが含まれる場合も、ダブルクォートで囲みます。

商品名,価格,説明
"ノートPC, 15インチ",150000,"高性能モデル"

Google スプレッドシートとの互換性

Google スプレッドシート → CSV

Google スプレッドシートからCSVをダウンロードすると、UTF-8(BOMなし) で保存されます。これをExcelで開くと文字化けします。

対策:

  1. ダウンロードしたCSVをテキストエディタで開く
  2. UTF-8 BOM付きで保存し直す
  3. 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への変換で文字化けを防ぐポイント:

  1. UTF-8 BOM付きで保存する(「CSV UTF-8」形式を選択)
  2. 相手の環境が分からない場合はBOM付きが無難
  3. プログラムで処理する場合はBOMなしUTF-8
  4. Mac↔Windows間のやり取りは特にエンコーディングに注意

CSVの文字化けでお困りの場合は AssistyのCSV文字化け修復ツール をお試しください。ブラウザにドラッグ&ドロップするだけで、文字コードを自動検出してUTF-8に変換します。