[[20210927134925]] 『TEXTファイル(UTF8BOM有)の文字化け』(TAC_M) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『TEXTファイル(UTF8BOM有)の文字化け』(TAC_M)

UTF8(BOM有り)のテキストファイルがあります。
これを、以下のように1行ずつ読み込むと


'TEXTファイル選択(ダイアログ)
    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


hatenaさん、回答ありがとうございます。

以下が参考になりそうなので参考にしました。
(ほぼそのままのコードを利用)

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


テキストファイルの通常の改行は vbCrLf なので、

    '改行毎にデータを分ける
        Dim A
            A = Split(buf, vbCrLf)

としたらどうでしょうか。
(hatena) 2021/09/27(月) 16:41


hatenaさん、vbCrLfに修正して
 改行が無い正常なテキストファイルが作成できました。

お陰様で問題は、解決しました。
(TAC_M) 2021/09/27(月) 16:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.