
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指定)の結果


