Excel VBA Tipsテキストファイルの書き込み

ADO(ActiveX Data Object) Streamを用いた
簡単にできる文字コード変換付きテキストファイルの書き込み関数を作ります。

変換できる文字コードは、

UTF-8
UTF-16(Unicode)
Shift_JIS
EUC-JP
ISO-2022-JP

などです。
今回は簡易版なのでBOMなしの扱いです。

こんな関数を作ります。
Write_TextFile(ファイル名, 文字列  [,文字コード])
文字コードは、省略可能で省略時はUTF-8でエンコードして書き込みます。

では、ソースファイル

'
' テキストファイルの書き込み
'
' [Input]
'  fileName :ファイル名
'  S        :書き込む文字列
'  chrCode  :文字コード(省略時はUTF-8)
'
' [Output]
'  戻り値   :書き込み結果 True(正常) or False(異常)
'
Function Write_TextFile(FileName As String, S As String, Optional chrCode As String = "UTF-8") As Boolean

    On Error GoTo ErrorHandler
    
    With CreateObject("ADODB.Stream")
        
    .Charset = chrCode
    .Open
    .WriteText S
    .SaveToFile FileName, 2    ' 上書き指定
    .Close
    
    Write_TextFile = True   ' 正常
    
    Exit Function

ErrorHandler:
    ' エラー処理
    MsgBox Err.Description & "(" & Err.Number & ")", vbCritical & vbOKOnly, "エラー"
    
    Write_TextFile = False  ' 異常
    
    End With
End Function

エラー処理を入れても20行満たなく簡単に作ることが出来ます。

実際に組んでテストしてみます。

テスト用のソースです。
(作った関数を呼び出すプログラム)

'
' テキストファイル書込みテスト
'
Sub TextWrite_Test()
    Dim testS As String
    Dim FileName As String
    Dim Result As Variant
    
    ' テスト用に書き込む文字列を作成
    testS = "今日は、良い天気です。" & vbCrLf & _
            "明日は、曇りでしょう。" & vbCrLf & _
            "明後日は、雨でしょう。"


    ' === UTF-8で書き込むテスト(UTF-8指定) ===
    ' ファイル名を作成
    FileName = ActiveWorkbook.Path & "\文字コードUTF-8.txt"
    ' ファイルの書き込み
    Result = Write_TextFile(FileName, testS, "UTF-8")
    
    
    ' === UTF-8で書き込むテスト(指定なし) ===
    ' ファイル名を作成
    FileName = ActiveWorkbook.Path & "\文字コード省略.txt"
    ' ファイルの書き込み
    Result = Write_TextFile(FileName, testS)
    
    
    ' === UTF-16で書き込むテスト(UTF-16指定) ===
    ' ファイル名を作成
    FileName = ActiveWorkbook.Path & "\文字コードUTF-16.txt"
    ' ファイルの書き込み
    Result = Write_TextFile(FileName, testS, "UTF-16")
    
    
    ' === SHIFT-JISで書き込むテスト(Shift_JIS指定) ===
    ' ファイル名を作成
    FileName = ActiveWorkbook.Path & "\文字コードShift-JIS.txt"
    ' ファイルの書き込み
    Result = Write_TextFile(FileName, testS, "Shift-JIS")

    
    ' === EUC-JPで書き込むテスト(EUC-JP指定) ===
    ' ファイル名を作成
    FileName = ActiveWorkbook.Path & "\文字コードEUC-JP.txt"
    ' ファイルの書き込み
    Result = Write_TextFile(FileName, testS, "EUC-JP")
    
End Sub

解説

適当な文字列を作って

    ' テスト用に書き込む文字列を作成
    testS = "今日は、良い天気です。" & vbCrLf & _
            "明日は、曇りでしょう。" & vbCrLf & _
            "明後日は、雨でしょう。"

それを、文字コードを変えながら書き込みを実行します。

出来上がったファイルをエディタ等で読み込んでみれば
指定した文字コードで書込みされたか検証できます。

それを、文字コードを変えながら書き込みを実行します。

出来上がったファイルをエディタ等で読み込んでみれば

指定した文字コードで書込みされたか検証できます。

実行後以下のテキストファイルが出来上がります。


ファイルの内容をテキストエディタで開いてみます。

UTF-8で書き込むテスト(UTF-8指定)の結果

UTF-8で書き込むテスト(指定なし)の結果

UTF-16で書き込むテスト(UTF-16指定)の結果

SHIFT-JISで書き込むテスト(Shift_JIS指定)の結果

EUC-JPで書き込むテスト(EUC-JP指定)の結果