ADODB.Stream (Microsoft ActiveX Data Objects)を使えば、コード変換をしながらCSVデータを出力することも可能。
CSVファイルの還元先システムが、Windows(Excel)以外で、文字コードを気にしなければならない場合、このサンプルコードが役に立つ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
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 |
コメント