UTF-8ファイルの読み込み
下のプロシージャを作成しました。
読み込んだファイルは後で使用するので、Private宣言の変数にしました。
ADODB.Streamを使用し、一行ずつ読み込み確認のためイミディエイトウィンドウに表示します。
イミディエイトウィンドウに表示させるには「Debug.Print」を使います。
Private Sub ExUtfRead()
Dim fname As String
Dim tmp As String
Dim tobj As Object
fname = Range("F5")
Set tobj = CreateObject("ADODB.Stream")
tobj.Charset = "UTF-8"
tobj.LineSeparator = 10
tobj.Open
tobj.LoadFromFile fname
Do Until tobj.EOS
tmp = tobj.ReadText(-2)
sUtfBuf = sUtfBuf & tmp
Loop
tobj.Close
Debug.Print sUtfBuf
End Sub
[変換開始]ボタンのクリックイベントから呼び出すようにします。
Private Sub CommandButton1_Click()
If Range("F5") = "" Then
MsgBox "変換ファイル名を入力してください。"
Exit Sub
End If
If ExDir(Range("F5"), vbNormal) = "" Then
MsgBox "変換ファイル名が存在しません。" _
& vbCrLf & "処理を中止します。"
Exit Sub
End If
ExUtfRead
End Sub
実行結果のイミディエイトウィンドウです。
文字化けせずに正常に読み込まれています。
(イミディエイトウィンドウを開くには、表示メニューで行います)
読み込んだファイルをBOM無しのUTF-8で保存します。
BOM無しにするに先頭の3バイトの情報を削除します。
BOM有りにするには、この部分のコードを削除してください。
引数を追加しIF文で選択できるようにしてもいいかと思います。
保存したUTF-8ファイルをテキストエディタで開いた画面です。
UTF-8(BOM無し)と表示されています。
念のためにバイナリエディタで比較しました。
処理前のファイルを開いたバイナリコードです。
処理後のファイルを開いたバイナリコードです。
違いはなく問題なく読み書きできています。