本日は趣向を変えてExcelマクロをひとつご紹介。
マクロを使って普通にファイル出力をすると、文字コードがShift-JISで出力されます。普段使いならそれでも全く問題ありませんが、それでは困ることもあります。
例えばUnityがそうで、UTF-8のファイルでないと読み込むことができません。
BOMなしUTF-8を出力するマクロ
以下のコードをVBAで書けばUTF-8で、しかもBOMなしでテキストファイルを出力することができます。
'UTF-8 BOMなしで出力
Public Function WriteTXTfileUTF(dir As String, filename As String, str As String) As Boolean
WriteTXTfileUTF = False
On Error GoTo err
Dim adb As New ADODB.stream
With adb
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText str
.Position = 0
.Type = adTypeBinary
.Position = 3
Dim buf As Variant
buf = .Read()
.Position = 0
.Write buf
.SetEOS
.SaveToFile dir & "\" & filename, adSaveCreateOverWrite
End With
adb.Close
Set adb = Nothing
WriteTXTfileUTF = True
err:
End Function
ADODBを利用するため、VBAの参照設定で「Microsoft ActiveX Data Objects ○○ Library」を追加する必要があります。 ○○にはバージョンが入りますが、とりあえず一番新しいバージョンを選べばいいかと思います。
引数はそれぞれに以下を渡してあげればOK。
- dir →ファイルを出力するフォルダのパス
- filename →出力するファイル名
- str →ファイルに出力するテキスト
成功するとTrueを返します。
ちょっとした解説
細かい説明は省きますが、ADODB.streamに必要な情報を渡した後にファイル出力をしているだけです。
BOMあり出力だともう少し簡単なんですが、BOMの情報を消すためにひと手間必要となるため少し長くなっています。
Unityでアイテムや敵キャラクターのデータをファイルから読み取りたいなんてケースはよくあるかと思います。
そんなときに是非ご活用ください!
参考サイト
vba、UTF-8・BOMなしでファイル出力