■ はじめに
* Excel VBA で、UTF-8形式でファイル保存する方法を記す
■ サンプル
Sub ボタン1_Click() If SaveFileWithUtf8("Hello World!", "helloWorld.txt") Then MsgBox "ファイル作成に成功しました", vbCritical & vbOKOnly, "成功" Else MsgBox "ファイルの作成に失敗しました", vbCritical & vbOKOnly, "エラー" End If End Sub Public Function SaveFileWithUtf8(ByVal inputData As String, ByVal fileName As String) As Boolean On Error GoTo ErrorHandler Dim isSuccessful As Boolean: isSuccessful = False ' 定数 Const AdodbTypeBinary As Integer = 1 Const AdodbTypeText As Integer = 2 Const AdodbSaveCreateOverWrite As Integer = 2 Const FileCharset As String = "UTF-8" ' ADODB.Streamを作成 Dim sourceOfDataStream: Set sourceOfDataStream = CreateObject("ADODB.Stream") ' 最初はテキストモードでUTF-8で書き込む sourceOfDataStream.Type = AdodbTypeText sourceOfDataStream.Charset = FileCharset sourceOfDataStream.Open ' ファイルに書き込み sourceOfDataStream.WriteText (inputData), 1 ' バイナリモードにするためにPositionを0に戻す ' Readするためにはバイナリタイプでないといけない sourceOfDataStream.Position = 0 sourceOfDataStream.Type = AdodbTypeBinary ' Positionを3にしてから読み込むことで最初の3バイトをスキップする ' UTF-8(BOMあり)のBOMをスキップします sourceOfDataStream.Position = 3 Dim binaryOutputData: binaryOutputData = sourceOfDataStream.Read() ' 読み込んだバイナリデータをバイナリデータとしてファイルに出力する Dim outputStream: Set outputStream = CreateObject("ADODB.Stream") outputStream.Type = AdodbTypeBinary outputStream.Open outputStream.Write (binaryOutputData) outputStream.SaveToFile fileName, AdodbSaveCreateOverWrite isSuccessful = True GoTo Finally ErrorHandler: isSuccessful = False Finally: 'ストリームの後始末 If Not outputStream Is Nothing Then outputStream.Close End If If Not sourceOfDataStream Is Nothing Then sourceOfDataStream.Close End If SaveFileWithUtf8 = isSuccessful End Function
関連記事
Excel マクロ ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2015/07/15/104500