[[20230619100018]] 『日本語Shift_jisに変換』(早々) ページの最後に飛ぶ

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

 

『日本語Shift_jisに変換』(早々)

現在、A列にファイルを読み込んでいます。

   'ファイルの読み込み(A列に読み込む)
    Dim buf As String
    Open Target2 For Input As #1
    Do Until EOF(1)
        Line Input #1, buf
        n = n + 1
        Ws1.Cells(n, "A") = buf
    Loop

漢字が含まれる場合、文字化けする事があるのですが
日本語Shift_jisに文字コードを変換すると文字化けしないようです。

現在は、最初にファイルを開いての文字コードをチェックして
日本語Shift_jisで無い場合は、日本語Shift_jisに変換しています。

VBAで文字コードをチェックして
日本語Shift_jisに変換すれば一つ手間が省けるのですが
コードをどう変換すれば良いですか?

< 使用 Excel:Excel2021、使用 OS:Windows10 >


 事前にnkfみたいな文字コード変換してくれるプログラムに通せばよろしいかと。

 元ファイルのの文字コードが分からなくて自動判定してくれるので、
 出力文字コードを指定してとにかく全部のファイルを通しちゃえば面倒がないです
(´・ω・`) 2023/06/19(月) 10:45:41

 > 漢字が含まれる場合、文字化けする事がある
 ひょっとしてテキストファイルがUTF-8形式なだけだったりして...

 であれば
 ADODB.Streamとか使って読み込んだら状況変わるかも知れませんね。

VBAでUTF-8のファイルをShift-JISに変換する | Excel作業をVBAで効率化
https://vbabeginner.net/convert-utf-8-files-to-shift-jis/

(白茶) 2023/06/19(月) 12:24:48


 > ひょっとしてテキストファイルがUTF-8形式なだけだったりして.
 私も1票入れます。白茶さんの提示された方法でたぶんいけそうな気がします。

 余計なことですが。
   もしも、予め文字コードがわからない不定、ということだと厄介かもしれません。
   ADODB.streamには文字コードの自動判定というのがあると思いますが、
   精度が低かった(誤判定)記憶があります。
(xyz) 2023/06/19(月) 12:39:36

 ADODB.Streamを使ったサンプルです。Shift_JISで読み込んで、文字化けしたらUTF8でリトライする例です。改行は「Cr+Lf」としています。
 この手の情報は「VBA ADODB.Stream」でググれば山のように出てくると思います。

 Sub test()
    Const path$ = "C:\xxxx\xxxx.txt"    '<=実際のパスに変更
    Dim buf
    buf = TextFileRead(path, "Shift_JIS")
    ActiveSheet.Columns("A").ClearContents
    ActiveSheet.Cells(1, "A").Resize(UBound(buf) + 1) = Application.Transpose(buf)
    If MsgBox("文字化けしましたか?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
    ActiveSheet.Columns("A").ClearContents
    buf = TextFileRead(path, "UTF-8")
    ActiveSheet.Cells(1, "A").Resize(UBound(buf) + 1) = Application.Transpose(buf)
 End Sub

 Private Function TextFileRead(ByVal path$, ByVal encode$, Optional ByVal LineSeparator$ = vbCrLf)
    Dim ss
    With CreateObject("ADODB.Stream")
        .Charset = encode
        .Open
        .LoadFromFile path
        ss = VBA.Split(.ReadText, LineSeparator)
        .Close
    End With
    TextFileRead = ss
 End Function
(まる2021) 2023/06/19(月) 13:25:45

コメント返信:

[ 一覧(最新更新順) ]


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