Excel VBAでUTF-8形式 HTMLファイルの読み込みと書き込み方法

Excel VBAでUTF-8形式のファイルを読み書きするには、ADODB.Streamを使用します。ここでは一気にまとめて読み込む方法と1行ずつ読み込む方法、そしてファイルに保存する方法を掲載します。



Homeに戻る > Excel ファイル操作のTipsへ


UTF-8形式のHTMLファイルをテキスト形式で読み込みテスト

以前に掲載した「テキストファイルの読込み」のコードを使用し読み込んでみます。
UTF-8形式のHTMLファイルをテキスト形式で読み込みテスト

'テキストファイルの読込み
Private Sub ExTxtRead()
     Dim fn As Long
     Dim tmp As String
     Dim fname As String
     Dim buf As String
     
    fname = "c:\test\index.html"
    fn = FreeFile
    Open fname For Input As #fn
         Do Until EOF(fn)
            Line Input #fn, tmp
            buf = buf & tmp
         Loop
     Close #fn
     MsgBox buf
 End Sub

下のように日本語部分が文字化けしています。
やはりテキスト形式の読み込みではダメなようです。
日本語部分が文字化けしている

UTF-8形式のHTMLファイルをまとめて読み込む

下のようなVBAになります。
UTF-8形式のHTMLファイルをまとめて読み込む
'UTF-8ファイルの読込み
Private Sub a1ExUtfRead()
    Dim buf As String
    Dim fname As String
    Dim tobj As Object
    
    fname = "c:\test\index.html"
    Set tobj = CreateObject("ADODB.Stream")
    tobj.Charset = "UTF-8"
    tobj.LineSeparator = 10
    tobj.Open
    tobj.LoadFromFile fname
    buf = tobj.ReadText
    tobj.Close
    MsgBox buf
End Sub

結果、下のように日本語が文字化けせずに正常に読み込まれています。
日本語が文字化けせずに正常に読み込まれた


UTF-8形式のHTMLファイルを1行ずつ読み込む

下のようなVBAになります。
CSVで保存する場合は、この方法で出力します。
UTF-8形式のHTMLファイルを1行ずつ読み込む
'UTF-8ファイルの読込み
Private Sub a2ExUtfRead()
    Dim buf As String
    Dim fname As String
    Dim tobj As Object
    
    fname = "c:\test\index.html"
    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)
            buf = buf & "*" & tmp
         Loop
    tobj.Close
    MsgBox buf
End Sub

結果、各行の先頭に*が付いているので間違いなく1行ずつ読み込まれています。
各行の先頭に*が付いている

UTF-8形式のHTMLファイルを書き込む

下のようなVBAになります。
UTF-8形式のHTMLファイルを書き込む
'UTF-8ファイルの読込み
Private Sub ExUtfSave()
    Dim buf As String
    Dim fname As String
    Dim tobj As Object
    Dim i As Long
    
    fname = "c:\test\index.html"
    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)
            buf = buf & tmp
            i = i + 1
            If i = 2 Then
                buf = buf & "<TEST>" & vbLf
            End If
         Loop
    tobj.Close
    MsgBox buf

    fname = "c:\test\index2.html"
    Set tobj = CreateObject("ADODB.Stream")
    tobj.Charset = "UTF-8"
    tobj.LineSeparator = 10
    tobj.Open
    tobj.WriteText buf
    tobj.SaveToFile fname, 2
    tobj.Close
End Sub

結果下のように、3行目に<TEST>の文字列が挿入され、正常に書き込みできました。
<TEST>の文字列が挿入され、正常に書き込みできた


Homeに戻る > Excel ファイル操作のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved