ADODB.Stream (Microsoft ActiveX Data Objects)を使えば、コード変換をしながらCSVデータを出力することも可能。
CSVファイルの還元先システムが、Windows(Excel)以外で、文字コードを気にしなければならない場合、このサンプルコードが役に立つ。
Sub ADODBStreamを利用したコード変換機能付きCSVファイル出力()
'microsoft cdo for windows 2000 参照設定 メール処理用
'Microsoft ActiveX Data Objects x.x Library 参照設定 Stremオブジェクトによるコード変換用
Dim i As Long
Dim j As Long
Dim strList As String
Dim FileName As String
Dim Charset As String
FileName = "C:\MyCSVlist_Shift-JIS_OUT.csv" 'CSVファイル名を指定
'https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/charset-property-ado?view=sql-server-ver15
'ストリームの内容が変換される文字セットを指定する文字列値を設定または返します。
'既定値は Unicodeです。 使用できる値は、インターネット文字セット名としてインターフェイスで渡される一般的な文字列です
'(たとえば、"iso-8859-1"、"Windows-1252" など)。 システムによって認識される文字セット名の一覧については、
'Windows レジストリの HKEY_CLASSES_ROOT \MIME\Database\Charset のサブキーを参照してください。
' Charset = "UTF-8"
Charset = "Shift-JIS" 'ここではShift-JISを指定
Dim ADOBStream As ADODB.Stream
Set ADOBStream = New ADODB.Stream
Dim Ws As Worksheet
Set Ws = ActiveSheet
'ストリームを開く
'ストリームオブジェクトに格納されているデータの型を指定します。
'StreamTypeEnum
'定数 値 説明
'adTypeBinary 1 バイナリデータを示します。
'adTypeText 2 既定値。 Charsetによって指定された文字セットに含まれるテキストデータを示します。
With ADOBStream
.Type = ADODB.StreamTypeEnum.adTypeText
.Charset = Charset
.Open
End With
'出力
With Ws.UsedRange
For i = 1 To .Rows.Count
strList = ""
For j = 1 To Ws.Columns.Count
If j > 1 Then
strList = strList & ","
End If
strList = strList & .Cells(i, j)
Next
ADOBStream.WriteText strList, ADODB.StreamWriteEnum.adWriteLine
Next
End With
'保存
ADOBStream.SaveToFile FileName, ADODB.SaveOptionsEnum.adSaveCreateOverWrite
'終了処理
ADOBStream.Close
Set ADOBStream = Nothing
End Sub

コメント