伊田生活ブログのロゴ
HOME  >  勉強
カテゴリー : 勉強 - プログラミング
•VBA •UTF-8 •Excel •LibreOffice


公開日:

VBAでUTF-8でテキストを書き込むサンプルコード


VBAで自分と同じディレクトリのファイルにテキストを書き込む関数について、以前ご紹介しました。


ここで、以下のコードを考えてみます。

[code1]
'Option VBASupport 1

Sub a()
writeToFile ("<meta charset=""UTF-8"">こんにちは")
End Sub


Private Sub writeToFile(htmlTxt)
    currentDir = ActiveWorkbook.Path
    targetFilePath = currentDir + "\" + "test.html"
    
    Open targetFilePath For Output As #1
        Print #1, htmlTxt
    Close #1  
End Sub

これは、「<meta charset="UTF-8">こんにちは」というHTMLの文字列をファイルに書き込むコードです。

このコードで Sub a() を実行すると、実行したファイルと同じディレクトリに、"test.html" というファイルが作成されます。ファイルをブラウザで開くと、下図のように、文字化けした文字列が表示されます。

img_1

本来は「こんにちは」と表示してほしいのですが、文字化けしてしまいました。文字化けしたのは、<meta charset="UTF-8"> と記述しているのに、作成されるファイルの文字コードは Shift_JIS だからです。

文字化けしないようにするには、UTF-8 で書き込む必要があります。

以下は、UTF-8で書き込むサンプルコードです。

[code2]
'Option VBASupport 1

Sub a()
writeToFile ("<meta charset=""UTF-8"">こんにちは")
End Sub

Private Sub writeToFile(htmlTxt)
    currentDir = ActiveWorkbook.Path
    targetFilePath = currentDir + "\" + "test.html"
    
    Dim obj As Object
    Set obj = CreateObject("ADODB.Stream")
    With obj
        .Charset = "UTF-8"
        .Open
        .WriteText htmlTxt
        .SaveToFile targetFilePath, 2
        .Close
    End With

End Sub

このコードで Sub a() を実行し、test.html をブラウザで開くと、下図のように表示されます。

img_2

文字化けしないで表示することができました。