[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『TEXTファイル(UTF8BOM有)の文字化け』(TAC_M)
UTF8(BOM有り)のテキストファイルがあります。
これを、以下のように1行ずつ読み込むと
ChDir TurgetFolder TurgetTEXT = Application.GetOpenFilename("TEXTファイル(*.txt),*.txt")
If VarType(TurgetTEXT) = vbBoolean Then MsgBox "選択がキャンセルされました" Else 'MsgBox TurgetFile & " が選択されました" End If
N = 0
'テキストファイルの読み込み Open TurgetTEXT For Input As #1
Do Until EOF(1) Line Input #1, buf N = N + 1 Ws1.Cells(N, "A") = buf Loop Close #1
EXCELの最初のセルがBOM付きの為に文字化けします。
(最初の3バイト「EF BB BF」が原因)
文字化けしないように読み込むコード又は方法を教えて下さい。
読み込むTEXTファイルを簡単に
BOM無しにコンバートするマクロがあればそれでも構いません。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
Open Line Input
はShift-JISで読み込みますので文字化けします。
UTF8はADODB.Streamで読み込む必要があります。
下記などをご参考に。
BOM有無UTF-8テキストファイルの読み書き - つらつら Excel VBA
https://tanaka0.hatenablog.com/entry/2019/05/06/091456
(hatena) 2021/09/27(月) 14:07
以下が参考になりそうなので参考にしました。
(ほぼそのままのコードを利用)
https://daitaideit.com/vba-read-output-utf8/
下記の「テキストファイルUTF8読み込み」上手く処理できました。
他のコードでA列を処理した結果をB列に書き出して
最終的に下記の「B列をTEXTファイルへ書き出す」を利用して
テキストファイルを書き出したのですが、
1行ごとに不要な改行が混入してしまいました。
どこを修正すれば良いでしょうか ?
'テキストファイルUTF8読み込み ------------------------
With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .LoadFromFile TurgetTEXT 'ファイルパス buf = .ReadText '読み込むデータ .Close End With
'改行毎にデータを分ける Dim A A = Split(buf, vbLf)
Dim B ReDim B(1 To 100, 1 To 100) As Variant
'コンマ毎にデータを分けてデータを保存する Dim C For i = 0 To UBound(A, 1) C = Split(A(i), ",") For j = 0 To UBound(C, 1) B(i + 1, j + 1) = C(j) Next Next
'データ貼り付け With Ws1 .Range(.Cells(1, "A"), .Cells(1, "A").Resize(UBound(B, 1), UBound(B, 2))) = B End With
’--------------------
'B列をTEXTファイルへ書き出す
'LastNo = ws1.Cells(Rows.Count, "A").End(xlUp).Row
'保存先及びファイル名 Target = TurgetFolder & "Mode_List.txt"
Set ado = CreateObject("ADODB.Stream")
'ADODB.Streamで扱う文字コードを設定する ado.Charset = "UTF-8"
'ADODB.Streamを開く ado.Open
'開いたADODB.Streamに内容を保管する 'adWriteLineは、書き込むデータの後ろに改行コードを書き込みます For ii = 1 To LastNo ado.WriteText Ws1.Cells(ii, "B").Value, 1 Next
'ADODB.Streamに保管されている内容をファイルに保存する ado.SaveToFile Target, 2 '第1引数には、保存したいファイルの名前を指定 '第2引数は、2=上書き ' 指定したファイルが存在しないときは、新規作成
'ADODB.Streamを閉じる ado.Close
End Sub
(TAC_M) 2021/09/27(月) 15:42
'改行毎にデータを分ける Dim A A = Split(buf, vbCrLf)
としたらどうでしょうか。
(hatena) 2021/09/27(月) 16:41
お陰様で問題は、解決しました。
(TAC_M) 2021/09/27(月) 16:48
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.