【Excel】【VBA】ADODB.Streamを利用したコード変換機能付きCSVファイル出力

EXCEL

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

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました