ExcelでCSVファイルを文字化けせずに開く方法!メモ帳やVBAで対応!

ExcelでCSVファイルを文字化けせずに開く方法!メモ帳やVBAで対応!

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を直接開くと文字化けします。

こんな時は、

POINT
  • メモ帳を使ってUTF-8をShift_JISに変換
  • VBAを使ってCSVの文字コードをShift_JISに変換
などの方法で対応できます。

それでは、具体的な方法を見ていきましょう!

1. メモ帳を使ってUTF-8をShift_JISに変換

まずはだれでも簡単にできるメモ帳を使って、CSVファイルの文字化けを解消する方法について説明します。
文字化けCSVファイルを手元に用意したら、以下の手順を実施します。

手順

  1. CSVファイルを「メモ帳」で開く
  2. 「ファイル」→「名前を付けて保存」を選択
  3. 「文字コード」を Shift_JIS(ANSI) に変更
  4. 「保存」ボタンを押してCSVを上書きする

Excelで開くと文字化けせずに表示されましたね!

POINT
  • 手軽に文字コードを変換できる
  • 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コードを実装します。

  1. ExcelのVBAエディタを開く(Alt + F11
  2. 「挿入」→「標準モジュール」を追加
  3. 上記のコードをコピーして貼り付け
  4. inputFileoutputFile のパスを自分の環境に変更
  5. ConvertUTF8ToShiftJIS を実行

ボタンを実装

VBAを実行するボタンを実装します。

  1. [開発] タブをクリック。
  2. [挿入] をクリックし、[フォーム コントロール]ボタン(ボタン: フォーム コントロール) を選択。
  3. シート上でドラッグし、ボタンを配置。
  4. [マクロの登録] ダイアログが表示されるので、該当マクロ名を選択する。

入力フォームを用意

文字化けファイルを指定する入力フォームを用意します。
エクセルの1シート目が対象となります。シート名は任意の名前を入れてください。

  1. 1シート目を選択。
  2. B2、B3列をフォルダパス入力欄とする枠を設置
  3. 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 はバイナリやテキストデータを扱えるオブジェクトです。
inputStreamUTF-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.ReadTextinputStream から読み込んだ UTF-8 データを outputStream に Shift_JIS 形式で書き込みます。
  • .SaveToFile outputFile, 2outputFile に Shift_JIS 形式で保存します。
    • なお、2は上書き保存を意味します。

ストリームのクローズと解放

    ' ストリームを閉じる
    inputStream.Close
    outputStream.Close
    Set inputStream = Nothing
    Set outputStream = Nothing
  • .Close → 開いたストリームを閉じます。
  • Set ... = Nothing → メモリを解放します。

メッセージボックスを表示

    MsgBox "CSVファイルの文字コードをShift_JISに変換しました!", vbInformation

変換が完了したラメッセージが表示されます。メッセージの内容は適宜変更してください。

さいごに

いかがでしょうか。

今回は、

  • メモ帳を使ってUTF-8をShift_JISに変換する方法
  • VBAを使ってCSVの文字コードを変換する方法

についてまとめました。

ExcelでCSVを文字化けせずに開くには、Shift_JISに変換するのが最も簡単な方法です。状況に応じて最適な方法を試してみてください!



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

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







コメントを残す

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

CAPTCHA ImageChange Image