公開日:
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
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](./24_h03_008_1.png)
本来は「こんにちは」と表示してほしいのですが、文字化けしてしまいました。文字化けしたのは、<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()
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](./24_h03_008_2.png)
文字化けしないで表示することができました。