CSVファイルをExcelで開くと、文字化けすることはありませんか?
けど、そんな中で悩むことは、
- UTF-8 のCSVをExcelで開くと文字化けしてしまう
- 手軽にUTF-8からShift_JISに変換する方法を知りたい
- VBAを使って自動でUTF-8からShift_JISに変換したい
ですよね。
今回はそんなお悩みを解決する
- メモ帳を使ってUTF-8からShift_JISに変換する方法
- VBAを使ってCSVの文字コードを変換する方法
についてまとめます!
もくじ
CSVの文字化けを防ぐ方法
ExcelはデフォルトでShift_JISのCSVを想定しているため、UTF-8のCSVを直接開くと文字化けします。

こんな時は、
- メモ帳を使ってUTF-8をShift_JISに変換
- VBAを使ってCSVの文字コードをShift_JISに変換
それでは、具体的な方法を見ていきましょう!
1. メモ帳を使ってUTF-8をShift_JISに変換
まずはだれでも簡単にできるメモ帳を使って、CSVファイルの文字化けを解消する方法について説明します。
文字化けCSVファイルを手元に用意したら、以下の手順を実施します。
手順
- CSVファイルを「メモ帳」で開く
- 「ファイル」→「名前を付けて保存」を選択
- 「文字コード」を Shift_JIS(ANSI) に変更
- 「保存」ボタンを押してCSVを上書きする
Excelで開くと文字化けせずに表示されましたね!
- 手軽に文字コードを変換できる
- Excelで開く前に一度メモ帳で保存する手間がかかる
2. VBAを使ってUTF-8からShift_JISに変換
次に少し技術レベルは上がりますが、Excel VBAを使って、CSVの文字コードをUTF-8からShift_JISに自動変換する方法について説明します。
これをツールとして常備しておけば、ボタンクリックでCSVの文字化けを解消することができますのでおすすめです。
まずはVBAコードについて以下のようになります。
VBAコード
Sub ConvertUTF8ToShiftJIS()
Dim inputFile As String, outputFile As String
inputFile = Sheets(1).Range("B2").Value & "\" & Sheets(1).Range("C2").Value ' 変換するCSVファイル
outputFile = Sheets(1).Range("B3").Value & "\" & Sheets(1).Range("C3").Value ' Shift_JIS に変換後のCSVファイル
Dim inputStream As Object, outputStream As Object
Set inputStream = CreateObject("ADODB.Stream")
Set outputStream = CreateObject("ADODB.Stream")
' UTF-8で読み込み
inputStream.Type = 2
inputStream.Charset = "utf-8"
inputStream.Open
inputStream.LoadFromFile inputFile
' Shift_JIS で書き込み
outputStream.Type = 2
outputStream.Charset = "Shift_JIS"
outputStream.Open
outputStream.WriteText inputStream.ReadText
outputStream.SaveToFile outputFile, 2
' ストリームを閉じる
inputStream.Close
outputStream.Close
Set inputStream = Nothing
Set outputStream = Nothing
MsgBox "CSVファイルの文字コードをShift_JISに変換しました!", vbInformation
End Sub
手順
以下の手順で実装していきます。
VBAコードを実装
まずは、エクセルを開き、VBAコードを実装します。
- ExcelのVBAエディタを開く(
Alt + F11
) - 「挿入」→「標準モジュール」を追加
- 上記のコードをコピーして貼り付け
inputFile
とoutputFile
のパスを自分の環境に変更ConvertUTF8ToShiftJIS
を実行
ボタンを実装
VBAを実行するボタンを実装します。
- [開発] タブをクリック。
- [挿入] をクリックし、[フォーム コントロール] の ボタン(ボタン: フォーム コントロール) を選択。
- シート上でドラッグし、ボタンを配置。
- [マクロの登録] ダイアログが表示されるので、該当マクロ名を選択する。
入力フォームを用意
文字化けファイルを指定する入力フォームを用意します。
エクセルの1シート目が対象となります。シート名は任意の名前を入れてください。
- 1シート目を選択。
- B2、B3列をフォルダパス入力欄とする枠を設置
- C2、C3列をファイル名入力欄とする枠を設置
入力フォームにファイル名を指定し、VBAを実行し、文字化けが解消されるか確認してみましょう。
入力は以下のようにしました。それぞれの環境に合わせて入力してください。
フォルダパス | ファイル名 |
E:\test | sample.csv |
E:\test\Shift_JIS 変換 | sample.csv |
文字化けファイルのほかに、文字化け修正したファイルの生成先となるフォルダパス、ファイル名も指定してください。

ボタンを押し、VBAを実行します。
メッセージが表示されれば成功です。

では、生成されたファイルを開きます。
はい、文字化けが解消されましたね!
VBAの説明
VBAについて説明します。
ADODB.Streamオブジェクトの作成
Dim inputStream As Object, outputStream As Object
Set inputStream = CreateObject("ADODB.Stream")
Set outputStream = CreateObject("ADODB.Stream")
ADODB.Stream
はバイナリやテキストデータを扱えるオブジェクトです。
inputStream
は UTF-8 のファイルを読み込むために使用します。
outputStream
は Shift_JIS に変換して書き出すします。
UTF-8 でファイルを読み込む
' UTF-8で読み込み
inputStream.Type = 2
inputStream.Charset = "utf-8"
inputStream.Open
inputStream.LoadFromFile inputFile
.Type = 2
→ ストリームのタイプを「テキストモード」に設定します。.Charset = "utf-8"
→ 読み込むファイルの文字コードをUTF-8 に設定します。.Open
→ ストリームを開きます(ファイルの読み込み準備)。.LoadFromFile inputFile
→ 指定されたinputFile
をUTF-8 で読み込みます。
Shift_JIS 形式で書き出す
' Shift_JIS で書き込み
outputStream.Type = 2
outputStream.Charset = "Shift_JIS"
outputStream.Open
outputStream.WriteText inputStream.ReadText
outputStream.SaveToFile outputFile, 2
.Type = 2
→ テキストモードに設定します。.Charset = "Shift_JIS"
→ 書き込む文字コードを Shift_JIS に変更します。.Open
→ 書き込み用ストリームを開きます。.WriteText inputStream.ReadText
→inputStream
から読み込んだ UTF-8 データをoutputStream
に Shift_JIS 形式で書き込みます。.SaveToFile outputFile, 2
→outputFile
に Shift_JIS 形式で保存します。- なお、2は上書き保存を意味します。
コメントを残す