Excelで文字化けになる原因と直す方法!CSVも!

Excelで文字化けになる原因と直す方法!CSVも!
ExcelでCSVを開いたら文字化けしてしまったときはないでしょうか。

けど、そんな中で悩むことは、

・CSVを開くと「縺薙s縺ォ縺。縺ッ」のような読めない文字になる
・「文字コード」と言われても、どこを直せばいいかわからない
・区切り位置をやり直しても、文字化けが直らない

ですよね。

今回はそんなお悩みを解決する

・Excelで文字化けになる原因と直す方法(文字コードの指定・区切り位置・VBAでの取り込み)

についてまとめます!

完成イメージ

CSVの文字化けは、ファイルの中身が壊れているわけではありません。
原因のほとんどは「文字コードの食い違い」です。
今回は
・文字化けが起きる3つの原因と、正しく取り込む方法(データ→テキストファイル・区切り位置・VBA)
をゴールにします。
原因が切り分けられれば、どのCSVでも落ち着いて対処できるようになります。

なお、半角カナと全角カナの見分け方や、VBAで文字コードを指定して開く方法、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。
早速実装して試してみましょう!
完成イメージ
上の画像が完成形です。文字化けしていた氏名と部署が、正しい日本語で表示されています。

STEP1. 元のデータを用意する

まずは取り込みたい商品マスタのサンプルを用意します。
1行目が見出し、2行目以降がデータで、8件あります。
A列が商品コード、B列が氏名、C列は部署です。
商品コードは半角の英数字なので、文字コードが違っても化けません。
逆に、B列とC列の日本語は文字コードの影響をもろに受けます。
この「正しい状態」を基準にして、次の文字化けと見比べていきましょう。
商品マスタのサンプル表(正しい状態)

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

商品コード 氏名 部署
A-1001 田中 健 営業部
A-1002 小林 美咲 総務部
A-1003 松本 彩 経理部
A-1004 山口 直樹 人事部
A-1005 斎藤 涼 企画部
A-1006 藤田 葵 販売部
A-1007 岡田 優 開発部
A-1008 後藤 進 購買部

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. 文字化けした状態を確認する

次が、同じCSVをそのまま開いてしまったときの状態です。
下の段が、文字化けしたときの表示です。
「田中 健」が「逕ー荳ュ 蛛・」、「営業部」が「蝟カ讌ュ驛ィ」になっています。
これは、ファイルの中身が壊れたのではありません。
UTF-8で保存された文字を、ExcelがShift_JISとして読んだために起きています。
化けるのは日本語の部分だけで、英数字の商品コードはそのまま残るのが特徴です。
文字化けした状態の表

STEP3. 文字化けが起きる3つの原因

文字化けの原因は、大きく3つに分けられます。
まずは、自分の症状がどれに当てはまるかを切り分けましょう。

文字化けの3つの原因

# 原因 見え方 対処
① 文字コードの食い違い(UTF-8⇔Shift_JIS) 日本語だけが読めない文字になる データ→テキストファイルで文字コードを指定して開く
② フォントが文字に対応していない 四角(□)や「?」で表示される セルのフォントを「Meiryo UI」などに変える
③ 半角カナと全角カナの混在 「ハンバイ」のように小さく表示される 全角に統一する(ASC関数・文字列の置換)

原因③ 半角と全角の違いを見分ける

半角カナは、文字コードの食い違いではありません。
「半角で入力された文字」がそのまま残っているだけです。
下の表は、半角カナと全角カナを並べたものです。
左の「ハンバイ」が半角、右の「ハンバイ」が全角です。
見た目は似ていても、データとしては別の文字として扱われます。
化けているのか、半角なだけなのかを、まず見分けましょう。
半角カナと全角カナの比較

STEP4. 対処① 文字コードを指定して開き直す

いちばん確実なのが、文字コードを指定して開き直す方法です。
CSVをダブルクリックで開かず、Excelの「データ」タブから取り込みます。
手順は次のとおりです。
① Excelを起動し、空のブックを開きます。
② データ タブ → データの取得 → テキストファイル(またはCSV)を選びます。
③ 保存先からCSVを選び、「インポート」をクリックします。
④ プレビュー画面で、「元のファイル」の文字コードを UTF-8 に変えます。
⑤ プレビューで日本語が正しく表示されたら「読み込み」をクリックします。
⑥ 取り込み先のシートとセル(例:A2)を指定してOKします。
プレビュー画面で、正しい文字が見えるかを必ず確認しましょう。
化けたまま読み込んでしまうと、あとから直すのが大変です。カンタンですね。
なお、取り込み画面の見た目はExcelのバージョンで異なるため、ここでは手順を文章で、結果を画像で確認します。
文字コードを指定して取り込んだ結果

STEP5. 対処② 区切り位置で列を整える

「1列に長い文字列として取り込んでしまった」ときは、区切り位置を使います。
区切り位置は、1つのセルに入った文字を、カンマなどで複数の列に分ける機能です。
まず、分けたいデータが入った列全体(例:A列)を選択します。
次に データ タブ → 区切り位置 をクリックします。
① 「元のデータを区切り文字で分ける」を選び、「次へ」をクリックします。
② 区切り文字で 「カンマ」にチェックを入れ、「次へ」をクリックします。
③ 各列のプレビューを確認し、必要なら「列のデータ形式」を指定して「完了」をクリックします。
これで、1列だったデータが商品コード・氏名・部署の3列に分かれます。
ただし、区切り位置では文字コードは直せません。
文字が化けているときは、先にSTEP4の方法で文字コードを直してから使いましょう。

STEP6. 対処③ VBAで文字コードを指定して開く

毎回同じCSVを取り込むなら、VBAで自動化するのがおすすめです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。

Sub ImportCsvUtf8()
    Dim st As Object, buf As String
    Dim rows As Variant, cols As Variant
    Dim i As Long, j As Long
    Set st = CreateObject("ADODB.Stream")
    st.Type = 2                      ' テキストモード
    st.Charset = "UTF-8"             ' 文字コードを指定(Shift_JISも可)
    st.Open
    st.LoadFromFile ThisWorkbook.Path & "\uriage.csv"
    buf = st.ReadText(-1)            ' 最後まで読み込む
    st.Close
    rows = Split(buf, vbCrLf)
    For i = 0 To UBound(rows)
        If Len(rows(i)) > 0 Then
            cols = Split(rows(i), ",")
            For j = 0 To UBound(cols)
                Cells(i + 1, j + 1).Value = cols(j)
            Next j
        End If
    Next i
End Sub

コードのポイントは、Charsetに文字コードを指定するところです。
“UTF-8” を “Shift_JIS” に変えれば、Shift_JISのCSVも読み込めます。
F5キーで実行すると、文字化けせずにシートへ取り込まれます。
ボタンに登録しておけば、クリック1つで毎回の取り込みが完了します。

タカヒロ

タカヒロ
文字化けの犯人(原因)の多くは、開くときの文字コードです。
Excelに「この文字コードで読んでね」と伝えるのがコツで、それが Charset = “UTF-8” の一行です。
一度覚えてしまえば、CSVの取り込みで困らなくなりますよ。


VBAで文字コードを指定して取り込んだ結果

文字化けの直し方の比較

ここまでの直し方を、用途ごとに表にまとめました。
症状に合わせて選ぶと迷いません。

方法 操作 向いている場面 注意
データ→テキストファイル データ タブ→テキストファイル→文字コードにUTF-8を指定 1つのCSVを正しく取り込みたいとき プレビューで文字を必ず確認する
区切り位置ウィザード データ タブ→区切り位置→カンマで区切る 1列にまとまって取り込まれた文字を分けたいとき 文字コードは直せない(列を分けるだけ)
VBA(ADODB.Stream) CreateObject(“ADODB.Stream”)+Charset=”UTF-8″ 毎回同じCSVを取り込みたいとき マクロ有効ブック(.xlsm)で保存する
POINT

文字化けの多くは 「UTF-8のCSVをShift_JISとして開いた」 ことが原因です。
まずは文字コードを疑い、「データ→テキストファイル」で文字コードを指定して開き直しましょう。
区切り位置は列を分ける機能で、文字コードは直せません。直す順番は「文字コード → 列の分割」です。

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったように直らないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
文字化けが直らない 指定した文字コードが違う UTF-8 と Shift_JIS を両方試す(多くの場合はどちらかで直ります)
一部の氏名だけ化ける 元データに別の文字コードが混在している 元のCSVを作り直し、文字コードを1つに統一する
記号が「□」や「?」になる フォントがその文字に対応していない セルを選択し、フォントを「Meiryo UI」などに変更する
「ハンバイ」のように小さい文字になる 半角カナで入力されている ASC関数や置換で全角に統一する(文字化けとは別の問題)
先頭に「・」や記号が付く BOM付きUTF-8の識別子が読み込まれた CSVを「UTF-8(BOMなし)」で保存し直す
数値が文字列として入る 取り込み時に文字列形式で入った VALUE関数や「区切り位置」で数値に変換する

文字コードと設定の説明

今回の操作で出てくる、文字コードとVBAの用語の概要です。
それぞれの違いを押さえておきましょう。

文字コード(UTF-8 / Shift_JIS)

UTF-8 世界中の文字を扱える国際標準の文字コードです。Webや最近のシステムのCSVでよく使われます。
Shift_JIS 日本語版Windowsで昔から使われてきた文字コードです。日本語版Excelの既定になっています。
できること 文字とコンピューターの数字を対応づけます。この対応表が違うと文字化けします。
こんなときに UTF-8のCSVをExcelがShift_JISとして読むと、日本語だけが化けます。
注意 どちらの文字コードかは、メモ帳の「名前を付けて保存」で確認できます。BOM付きのUTF-8は先頭に記号が付くことがあります。
UTF-8 / Shift_JIS / UTF-8(BOMなし)

ADODB.Stream(VBA)

書式 Set st = CreateObject(“ADODB.Stream”)
できること ファイルを文字コードを指定して読み書きできるオブジェクトです。
戻り値 Streamオブジェクト(ファイルを読み書きする入れ物)
こんなときに CSVを文字コード指定で正しく取り込みたいとき。
注意 参照設定が不要なCreateObjectを使うと、他のPCでも動かしやすいです。
Set st = CreateObject("ADODB.Stream")

Charset プロパティ(VBA)

書式 st.Charset = “UTF-8”
できること 読み書きする文字コードを指定します。
値 “UTF-8” / “Shift_JIS” / “Unicode” など
こんなときに 文字化けするCSVを、正しい文字コードで読み込みたいとき。
注意 ここを間違えると、せっかくのVBAでも文字化けします。UTF-8かShift_JISかを最初に確認しましょう。
st.Charset = "UTF-8"

完成

文字化けしていた氏名と部署が、正しい日本語で表示されました。
上の段が元のデータ、下の段が文字コードを指定して取り込んだ結果です。
両方が同じ表示になっていれば成功です。
思ったとおりに動きましたか?
ポイントは、CSVをダブルクリックで開かず、文字コードを指定して取り込むことでした。
一度やり方を覚えれば、次からは落ち着いて対処できます。
文字化けが直った完成表

さいごに

いかがでしょうか。

今回は、

・Excelで文字化けになる原因と直す方法(文字コードの指定・区切り位置・VBA)

についてまとめました。

文字化けのほとんどは、UTF-8のCSVをShift_JISとして開いたことが原因です。
まずは文字コードを疑い、「データ→テキストファイル」で開き直してみてください。
区切り位置は列を分ける機能なので、直す順番は「文字コード → 列の分割」です。
まずは今回のサンプル表で、ぜひ一度試してみてください。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image