ADO(ActiveX Data Object) Streamを用いた
簡単にできる文字コード変換付きテキストファイルの書き込み関数を作ります。
変換できる文字コードは、
UTF-8
UTF-16(Unicode)
Shift_JIS
EUC-JP
ISO-2022-JP
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指定)の結果