ExcelでCSVを開いたら文字化けしてしまったときはないでしょうか。
けど、そんな中で悩むことは、
・「文字コード」と言われても、どこを直せばいいかわからない
・区切り位置をやり直しても、文字化けが直らない
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
完成イメージ
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の取り込みで困らなくなりますよ。

文字化けの直し方の比較
ここまでの直し方を、用途ごとに表にまとめました。
症状に合わせて選ぶと迷いません。
| 方法 | 操作 | 向いている場面 | 注意 |
|---|---|---|---|
| データ→テキストファイル | データ タブ→テキストファイル→文字コードにUTF-8を指定 | 1つのCSVを正しく取り込みたいとき | プレビューで文字を必ず確認する |
| 区切り位置ウィザード | データ タブ→区切り位置→カンマで区切る | 1列にまとまって取り込まれた文字を分けたいとき | 文字コードは直せない(列を分けるだけ) |
| VBA(ADODB.Stream) | CreateObject(“ADODB.Stream”)+Charset=”UTF-8″ | 毎回同じCSVを取り込みたいとき | マクロ有効ブック(.xlsm)で保存する |
文字化けの多くは 「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をダブルクリックで開かず、文字コードを指定して取り込むことでした。
一度やり方を覚えれば、次からは落ち着いて対処できます。

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








コメントを残す