
ADODB.Streamオブジェクトを使用してCSVを出力する
CSVを文字コード(UTF-8)を指定して出力するには、ADODB.Streamオブジェクトを使用します。
ADODB.Streamオブジェクトはバイナリデータやテキストデータを扱う際に使用されるオブジェクトです。ADODB.StreamオブジェクトのTypeプロパティに「UTF-8」を指定することで文字コードがUTF-8のCSVファイルが出力されます。
ADODB.Streamオブジェクトを使用するにはObject型の変数を定義し、ADODB.Streamオブジェクトを生成することで使用することができます。
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
エクセルシート内のデータをCSVに出力する

上記のデータをCSVファイルに出力します。
下記のサンプルコードはエクセルファイルと同じフォルダ内にCSVファイルを出力する方法となります。
サンプルコード
Sub CSV出力()
Dim WS As Worksheet
Dim stream As Object
Dim SavePath As String
Dim LastRow As Long, i As Long
Dim csv_data As String
'CSVを出力するデータが入っているシートを指定します
Set WS = ThisWorkbook.Worksheets("data")
'CSVを出力するパスを指定します(エクセルファイルと同じディレクトリにCSVを出力します)
SavePath = ThisWorkbook.Path & "\テスト.csv"
With WS
'CSVを出力するデータが入っているシートのA列の最終行を取得します
LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
'CSVに出力するデータをcsv_dataに格納していきます
For i = 1 To LastRow
'カンマ区切りで名前、年齢、職業を繋げています
csv_data = csv_data & .Cells(i, "A").Value & "," & _
.Cells(i, "B").Value & "," & _
.Cells(i, "C").Value & vbCrLf
Next i
End With
'ADODB.Streamオブジェクトを生成します
Set stream = CreateObject("ADODB.Stream")
With stream
.Type = 2 'テキストモード
.Charset = "UTF-8" 'UTF-8エンコードを指定
.Open
.WriteText csv_data
.SaveToFile SavePath, 2
.Close
End With
'リソースの開放
Set stream = Nothing
Set WS = Nothing
End Sub
上記のサンプルコードを実行することでエクセルファイルと同じフォルダ内にCSVファイルが出力されました。

ADODB.Streamオブジェクトのプロパティの詳細
プロパティ名 | 設定値 | 説明 |
---|---|---|
Type | 1 | バイナリモード(画像、音声、圧縮ファイルなど) |
2 | テキストモード(テキストファイル) | |
Charset | UTF-8 | 文字コードUTF-8を指定 |
Shift-JIS | 文字コードShift-JISを指定 | |
SaveToFile(第2引数) | 1 |
新規ファイル作成 ※同じファイルが存在していた場合はエラーとなります。 |
2 |
上書き保存 ※同じファイルが存在していた場合は上書きとなります。 |