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
・65001:UTF-8
・1200:UTF-16
今回のANSIはShift-JISだそうです。なので、上に示したソースコードであれば文字化けは免れました。
csvの保存の仕方で文字コードが変わってしまうようなので、文字化けしてしまった際には確認が必要です。
参考:文字化けした文字(?)から、どの文字コードして読み込んでいるのか確認
どの文字コードをどの文字コードで読み込めば、どう表示されるかは組み合わせによって異なるようです。
調べている途中でサイトを見つけたので、参考までにアップしておきます。
まとめ
以上、本記事では、文字化けしてしまった際の対処方法について記載しました。上記で解決すればよいですが、csvの保存する度に結果が変わってしまったりします。都度、文字コードを確認するようにしたいと思います。
コメントを入力