Excel VBAでBOM無しのUTF-8ファイルを作成する方法

UTF-8形式のファイルにはBOM有りとBOM無し(UTF-8N)があります。普通に作成すればBOM有りになってしまうので、前回のVBAを少し変更しBOMなしを作成します。

BOM(ボム)とは、「Byte Order Mark」の略で先頭の3バイトに情報が登録されています。

この先頭の3バイトを書き込まなければBOM無しになります。



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


ROM無しのUTF-8ファイルを作成する

前回の記事「Excel VBAでUTF-8形式 HTMLファイルの読み込みと書き込み方法」で作成したファイルをエディタで開いてみると、下のステータスバーに「UTF-8(BOM付き)」と表示されています。
ステータスバーに「UTF-8(BOM付き)」と表示されている

下の赤矢印部分からが、VBAを変更したコードです。
VBAを変更したコード


  1. ADODB.Streamを開き直しています。
  2. Position = 0 : オブジェクトの先頭からの位置を0バイトにしています。
  3. Type = 1 : データの種類をバイナリにしています。 デフォルトは2のテキストです。
    adTypeBinaryを使用すると、Excel2013でエラーになったため直接値で設定しています。
  4. Position = 3 : 先頭からの位置を3バイト目にし、これでBOMの部分を飛ばします。
  5. Read : バイナリで読み込みます。
  6. Write : バイナリデータを書き込みます。
  7. SetEOS : 終わりの位置を指定します。
Option Explicit

Private Sub ExUtfSave()
     Dim tmp As String
     Dim buf As String
     Dim fname As String
     Dim tobj As Object
     Dim i As Long
     Dim byteTmp() As Byte
     
     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
     

     Set tobj = CreateObject("ADODB.Stream")
     tobj.Charset = "UTF-8"
     tobj.Open
     tobj.Writetext buf
     tobj.Position = 0
     tobj.Type = 1
     tobj.Position = 3
     byteTmp = tobj.Read
     tobj.Close

     fname = "c:\test\index6.html"
     Set tobj = CreateObject("ADODB.Stream")
     tobj.Charset = "UTF-8"
     tobj.LineSeparator = 10
     tobj.Type = 1
     tobj.Open
     tobj.Write byteTmp
     tobj.SetEOS
     tobj.SaveToFile fname, 2
     tobj.Close
 
  End Sub

これでファイル内容を変更した結果を、BOM無しのUTF-8ファイルに保存できました。
作成したUTF-8ファイルをエディタで開いた画面です。
作成したUTF-8ファイルをエディタで開いた画面


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

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


Copyright (c) Excel-Excel ! All rights reserved