ぺんたんがゲーム開発やアプリ開発、最近の気になる話題、特にスマホやIT関連について語る場所

ぺんごや

Excel

【Excel】BOMなしのUTF-8テキストファイルを出力するマクロ(Unity向け)

投稿日:

本日は趣向を変えて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でアイテムや敵キャラクターのデータをファイルから読み取りたいなんてケースはよくあるかと思います。
そんなときに是非ご活用ください!

-Excel

Copyright© ぺんごや , 2019 All Rights Reserved Powered by STINGER.