前提
Excel VBA で CSVデータを読み込みExcelシートに出力する
CSVデータがSJISの場合、下記のソースで文字化けせずに読込ができますが
UTF-8(BOM有)の場合、文字化けします。
実現したいこと
ソースコードを大きく変更することなく、文字化けさせないようにするには
どのようにすればよいのでしょうか。
また、CSVデータ件数が多く、1件づつ読み込む方法では時間がかかるため、
以下の読込方法をできれば使いたい。
VBA
1 Open "C:\temp\data2.csv" For Binary As #1 2 ReDim buf(1 To LOF(1)) 3 Get #1, , buf 4 Close #1
CSVデータ
・ヘッダーはダブルコーテーションなし
・データはダブルコーテーションあり、カラム内に改行コードあり
・行末はカンマで終わっている
(例)data2.csv
列1,列2,列3,
"0001","漢字1-1 漢字1-2","AAAAA",
"0002","漢字2ー1
漢字2ー2","BBBBBBBBB",
"0003","漢字3ー1 漢字3ー2","漢字漢字",
該当のソースコード
VBA
1'CSVデータがSJisではOKのコード 2Public Sub test() 3 Dim buf() As Byte 4 Dim tmp As Variant, tmp2 As Variant 5 Dim i As Long 6 Dim t1 As String 7 Dim t2 As String 8 9 Open "C:\temp\data2.csv" For Binary As #1 10 ReDim buf(1 To LOF(1)) 11 Get #1, , buf 12 Close #1 13 14 t1 = "," & vbCrLf 15 t2 = """," & vbCrLf 16 17 buf2 = StrConv(buf, vbUnicode) 18 buf3 = Replace(buf2, t1, t2) 19 20 tmp = Split(buf3 & "," & vbCrLf, """," & vbCrLf) 21 22 For i = 0 To UBound(tmp) - 1 23 If i > 0 Then 24 tmp2 = Split(tmp(i), """,""") 25 Else 26 tmp2 = Split(tmp(i), ",") 27 End If 28 29 tmp2(0) = Replace(tmp2(0), """", "") 30 tmp2(UBound(tmp2)) = Replace(tmp2(UBound(tmp2)), """", "") 31 Cells(i + 1, 1).Resize(1, UBound(tmp2) + 1).Value = tmp2 32 Next i 33End Sub
試したこと
補足情報(FW/ツールのバージョンなど)
Excle2016

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/06 08:24