CSVを読み込んで文字化けした場合の対処方法について【Excel VBA】

VBA

VBAでcsvファイルを読み込んだ場合に文字化けしてしまいました。何となく色々試して解決したのですが、今後、同じことが起きたときにすぐに解決できるよう、対処方法について記載します。

なぜ、文字化けするのか

文字化けする原因は、読み込むcsvファイルの文字コードとVBAに記載しているファイルを開くときに使用する文字コードが異なるためです。

csv読み込みのサンプルコード

今回、文字化けを起こしてしまったサンプルコードを記載します。

Sub CSV読み込み()
Dim sht1 As Worksheet: Set sht1 = ThisWorkbook.Sheets("○○")
    '○○にはシート名を記載。
    
    'CSVの読み込み
    If MsgBox("処理を行う前にcsvファイルを読み込みますか?" & vbLf & "(○○シートは全て削除されます。)", vbYesNo + vbInformation) = vbNo Then Exit Sub
    
    Dim fn As String: fn = Application.GetOpenFilename("CSVファイル,*.csv", 1, "□□CSVファイルを選択")
    '□□には読み込みたいcsvファイルの名前を記載
    
    If fn = "False" Then Exit Sub
    
    sht1.UsedRange.Clear
    
    With sht1.QueryTables.Add(Connection:="TEXT;" & fn, Destination:=sht1.Range("A1"))
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .RefreshPeriod = 0
        .TextFilePlatform = 932
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileCommaDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
        .Delete
    End With
    'CSVの読み込み(完了)
End Sub

答えを先に書いてしまうと、注目するのは、19行目です。

TextFilePlatform = 932

の932の部分です。

手順1:読み込んだcsvファイルの文字コードを確認

読み込みファイルのcsvファイルは、メモ長で開けば確認できます。

確認方法は以下のサイトに記載があります。

私が読み込んだcsvデータの文字コードを確認したところ、ANSIになっていました。

手順2:適切な文字コードとしてなるように、VBAソースコードの設定を変更

今回は、csvをクエリーテーブルを使って開いています。そのため、

TextFilePlatform =

の部分で文字コードを指定可能です。

数値によって文字コードが異なります。

・932:Shift_JIS
・65001:UTF-8
・1200:UTF-16

今回のANSIはShift-JISだそうです。なので、上に示したソースコードであれば文字化けは免れました。

csvの保存の仕方で文字コードが変わってしまうようなので、文字化けしてしまった際には確認が必要です。

参考:文字化けした文字(?)から、どの文字コードして読み込んでいるのか確認

どの文字コードをどの文字コードで読み込めば、どう表示されるかは組み合わせによって異なるようです。

調べている途中でサイトを見つけたので、参考までにアップしておきます。

まとめ

以上、本記事では、文字化けしてしまった際の対処方法について記載しました。上記で解決すればよいですが、csvの保存する度に結果が変わってしまったりします。都度、文字コードを確認するようにしたいと思います。

コメントを入力

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