ExcelでCSVを開いたら文字化けする原因と解決法|UTF-8・Shift-JIS・BOMを図解

スポンサーリンク

基幹システムからダウンロードした CSV を Excel で開いたら、日本語が「縺ゅ&繧定耳」のように化けた。そんな経験はありませんか?

文字化けは「ファイルが壊れた」のではなく、Excel が文字コードを誤判定しているだけのことが多いです。仕組みを理解してしまえば、毎回ググらなくても落ち着いて対処できますよ。

この記事では Excel で CSV を開いたときに文字化けが起きる原因を、UTF-8・Shift-JIS・BOM の3つのキーワードで図解します。既に化けたファイルを救う方法と、次回からの予防策もまとめて紹介していきますね。

CSV を Excel で開くと文字化けするのはなぜ?

文字化けの正体は、ファイルの保存形式と Excel の読み取り形式がズレていることです。

CSV はただのテキストファイルで、中身は「バイト列」と呼ばれる数字の並びでしかありません。そのバイト列を「どの文字コードで読むか」を決めるのは、開く側のソフト(ここでは Excel)です。

例えば「あ」という1文字をファイルに保存するとき、文字コードによって違うバイト列になります。

文字コード「あ」のバイト列バイト数
UTF-8E3 81 823バイト
Shift-JIS82 A02バイト

UTF-8 で保存された E3 81 82 を Shift-JIS だと思って読むと、別の文字(縺)に化けてしまうんですね。これが文字化けの正体です。

つまり Excel CSV 文字化けの原因は、ほぼ次の3つに集約されます。

  1. ファイルが UTF-8 なのに Excel が Shift-JIS で読んでいる(Web 系ツールに多い)
  2. ファイルが Shift-JIS なのに Excel が UTF-8 で読んでいる(クロス環境で起きる)
  3. 一部の漢字(環境依存文字)だけが「?」になっている

このうち圧倒的に多いのが 1番目です。次の章で UTF-8 と Shift-JIS の違いを整理しましょう。

UTF-8 と Shift-JIS の違いを図解で理解する

文字化けの仕組みを掴むには、2つの文字コードの性格を知っておくと早いです。

UTF-8 とは

UTF-8 は世界中の文字を扱える国際標準の文字コードです。正式名称は Unicode Transformation Format – 8bit といいます。

  • 1文字を 1〜4 バイトの可変長で表現する
  • 日本語の漢字・ひらがな・カタカナは 3 バイトで表現
  • Web の標準(HTML、JSON、API レスポンスはほぼ UTF-8)
  • Shopify、Amazon Seller Central、Google フォームなどクラウドサービスのエクスポートも UTF-8 がほとんど

Shift-JIS とは

Shift-JIS は日本独自の文字コードで、Microsoft の Windows 日本語環境で長年使われてきました。

  • 日本語は 2 バイトで表現
  • 半角英数字は 1 バイト
  • 国産の基幹システム、銀行 CSV、Excel 既定の「CSV (カンマ区切り)」保存形式はほぼ Shift-JIS
  • Windows のメモ帳でいう「ANSI」は、日本語環境では Shift-JIS(厳密には CP932)のこと

Excel の判定ロジック

Excel for Windows は CSV ファイルをダブルクリックで開いた瞬間、ファイル先頭の数バイトを見て文字コードを推定します。判定基準は次の通りです。

ファイルの状態Excel の判定結果
BOM 付き UTF-8UTF-8 として読む正常
BOM なし UTF-8Shift-JIS として読む文字化け
Shift-JISShift-JIS として読む正常

BOM 付き UTF-8 と Shift-JIS は問題なし。問題は「BOM なし UTF-8」のときだけ起きるんですね。

ここで出てきた「BOM」が次の鍵になります。

BOM(Byte Order Mark)が文字化けを防ぐ仕組み

BOM(Byte Order Mark)とは、ファイル先頭に置かれる3バイトの目印です。具体的には EF BB BF という3バイトを、ファイルの一番先頭に書き込みます。

このバイトは文字としては表示されません。でも Excel はこの3バイトを見て「これは UTF-8 ファイルだ」と判定するんです。

BOM の有無で何が変わる?

状態ファイル先頭Excel の挙動
BOM 付き UTF-8EF BB BF あ,い,うUTF-8 として正しく読む
BOM なし UTF-8あ,い,うShift-JIS と誤認して文字化け

つまり BOM は「私は UTF-8 です」という自己申告タグなんですね。Web 系ツールの CSV は BOM なし UTF-8 が多く、ダブルクリックすると化けてしまいます。

BOM 付き UTF-8 のことを「UTF-8 with BOM」「UTF-8-SIG」と呼ぶこともあります。テキストエディタの保存ダイアログで見かけたら同じものだと思ってくださいね。

既に文字化けした CSV を直す3つの方法

すでに化けてしまった CSV ファイルがある場合、対処の方向性は2つです。

  • ファイル側を変える: ファイルの文字コードを Shift-JIS に変換し直す
  • Excel 側の読み方を変える: ファイルはそのまま、Excel に「UTF-8 で読んで」と指示する

それぞれ具体的な手順を見ていきましょう。

方法1: メモ帳経由で文字コードを変換する

最もシンプルなのが、Windows のメモ帳を経由する方法です。

  1. CSV ファイルを右クリック → 「プログラムから開く」 → 「メモ帳」
  2. メモ帳でファイルが開く(ここで日本語が正しく見えていれば OK)
  3. ファイル → 名前を付けて保存
  4. 「文字コード」を「ANSI」(Windows 日本語環境では Shift-JIS)に変更
  5. ファイル名はそのままで「保存」 → 上書き確認で「はい」
  6. 保存し直したファイルを Excel でダブルクリック

メリットは追加ツールが不要なこと。デメリットは、ファイルが大きいと遅いこと、改行コード(CRLF / LF)が崩れることがある点です。

方法2: Power Query で取り込む(おすすめ)

Excel 2016 以降に標準搭載されている Power Query は、文字化けに対する最強の対処法です。

  1. Excel を起動して空白ブックを開く
  2. 「データ」タブ → 「テキストまたは CSV から」をクリック
  3. ダイアログで CSV ファイルを選択して「インポート」
  4. プレビュー画面が開くので、左上の「ファイルの元の形式」のドロップダウンを開く
  5. 「65001: Unicode (UTF-8)」を選択
  6. プレビューが正しく表示されるのを確認したら「読み込み」ボタンをクリック

メリットは3つあります。ファイル自体を変更しないこと、列ごとのデータ型も指定できること、一度クエリを作れば「更新」ボタンで再読み込みできることです。同じ形式のファイルを定期的に扱う業務には特におすすめですよ。

デメリットは Excel 2016 以降が必要な点。古い Excel では使えませんが、Microsoft 365 や Excel 2024 を使っているなら標準で入っています。

方法3: VS Code やサクラエディタで変換する

エンジニア寄りの方法ですが、テキストエディタで文字コードを変換する手もあります。

  1. VS Code でファイルを開く
  2. 画面右下のステータスバーに「UTF-8」と表示される
  3. クリックして「エンコード付きで保存」を選択
  4. 「Shift_JIS」を選んで保存

大きなファイルでも高速で、BOM の付け外しも明示的にできます。普段から VS Code を使っている方には一番手軽な方法ですよ。

文字化けを予防する方法

毎回 Excel で化けてから対処するのは面倒ですよね。次の2つの方法を覚えておくと、そもそも文字化けに遭遇しなくなります。

Power Query を業務フローに組み込む

ダブルクリックで開く習慣をやめて、最初から Power Query で取り込むようにします。

楽天・Shopify・Amazon・Salesforce などのエクスポートをよく扱う方は、それぞれの形式に対してクエリを作っておきましょう。一度作ればワンクリックで再読み込みできるので、月次レポート作成の手間が大きく減ります。

具体的には、上記「方法2」の手順で取り込んだあと、ファイルを保存しておきます。次に新しいエクスポートを取り込むときは、同じファイルを開いて「データ」タブの「すべて更新」をクリックするだけです。

保存側を BOM 付き UTF-8 にする

システム管理者・開発者の方なら、CSV を書き出す側で BOM を付けるのが根本解決です。

Python のスクリプトで CSV を書き出す例を載せておきますね。

import pandas as pd

df = pd.DataFrame({"商品名": ["りんご", "ばなな"], "価格": [150, 80]})

# BOM 付き UTF-8 で保存(Excel でダブルクリックしても化けない)
df.to_csv("output.csv", encoding="utf_8_sig", index=False)

utf_8_sig を指定するだけで BOM 付き UTF-8 になります。これだけで、社内の Excel ユーザーがダブルクリックで開いても文字化けしません。

社内ツールやスクリプトを管理する立場なら、このひと工夫で問い合わせ対応がぐっと減りますよ。

業務シーン別の対処法

実務でよく遭遇するサービス別に、CSV の文字コードと対処法をまとめました。

サービス元の文字コードダブルクリック時推奨対処法
楽天 RMSShift-JIS正常に開けるそのまま
Shopify エクスポートUTF-8(BOM なし)文字化けPower Query
Amazon Seller CentralUTF-8(BOM なし)文字化けPower Query
BASE ストア管理UTF-8(BOM なし)文字化けPower Query
Salesforce レポートUTF-8(設定依存)設定次第Power Query
Google スプレッドシートCSVUTF-8(BOM なし)文字化けPower Query
国産基幹システムShift-JIS が多い正常に開けるそのまま
銀行明細CSVShift-JIS が多い正常に開けるそのまま
Microsoft Forms 結果UTF-8(BOM 付き)正常に開けるそのまま

迷ったときの判断基準はシンプルです。「Web 系・クラウド系のツール → Power Query 経由」「国産システム・銀行系 → ダブルクリックで OK」。これだけ覚えておけば、ほとんどのケースに対応できますよ。

一部の漢字だけ化ける場合

「髙(はしごだか)」「﨑(たちさき)」「①(丸数字)」などが「?」になるパターンです。これらは環境依存文字と呼ばれ、Shift-JIS の範囲外もしくは機種依存の文字です。

UTF-8 から Shift-JIS に変換するときに、対応する文字がないため失われてしまいます。これを避けるには、元データを UTF-8 のまま扱うのが鉄則。Power Query で UTF-8 のまま取り込めば、環境依存文字も正しく表示されます。

よくある質問

Q. CSV ファイル自体に文字コード情報は記録されていないの?

CSV はただのテキストファイルなので、原則として文字コード情報は持っていません。BOM が付いていれば「これは UTF-8 です」という目印になりますが、それ以外の手がかりはないんです。

だから受け取った CSV の文字コードは、ファイル名や提供元の慣習から推測するしかありません。Web 系なら UTF-8、国産システムなら Shift-JIS というのが大まかな目安ですよ。

Q. 最新の Excel なら自動判定してくれない?

Microsoft 365 や Excel 2024 でも、BOM なし UTF-8 はやはり化けやすいです。判定アルゴリズムは改善されていますが、確実ではありません。

業務で安定して扱うなら Power Query 経由が一番確実です。

Q. 文字化けしたファイルは壊れているの?

いいえ、ファイル自体は無傷です。ただ Excel が違う文字コードで読んでいるだけなので、正しい文字コードで読み直せば元通りに見えます。

化けた状態で Excel から保存し直してしまうと、その時点で文字情報が失われることがあるので注意してください。保存する前に必ず文字化けを直すのが鉄則です。

Q. メモ帳の「ANSI」って何?

Windows 日本語環境では「ANSI = Shift-JIS(CP932)」と思って大丈夫です。米国版 Windows では ANSI = Windows-1252 になりますが、日本で使う分には Shift-JIS のことだと考えてくださいね。

Q. Mac の Excel はどうなる?

Excel for Mac(2016 以降)は判定アルゴリズムが少し違います。それでも BOM 付き UTF-8 なら安定して読めますよ。Mac で扱う前提のファイルは UTF-8(BOM 付き)で書き出すのがおすすめです。

関連記事

CSV の取り込みやデータ整形まわりでつまずいたときは、次の記事もあわせて読むと作業がスムーズになります。

まとめ

Excel で CSV を開くと文字化けする原因と解決法を整理してきました。要点をおさらいしましょう。

  • 文字化けは「ファイルの文字コードと Excel の読み方のミスマッチ」で起きる
  • 原因のほとんどは「BOM なし UTF-8 を Excel が Shift-JIS と誤認」するパターン
  • BOM はファイル先頭の3バイト(EF BB BF)で、UTF-8 の自己申告タグ
  • 既に化けたファイルは「メモ帳経由」「Power Query」「VS Code」のどれかで救える
  • 予防策の本命は Power Query を業務フローに組み込むこと
  • システム側で書き出す立場なら BOM 付き UTF-8(utf_8_sig)にすれば根本解決

Web 系・クラウド系ツールの CSV は Power Query で取り込む癖をつけると、毎月の文字化け対応がほぼゼロになります。ぜひ次に CSV を扱うときから試してみてくださいね。

タイトルとURLをコピーしました