Excel VBAでADODB.Stream(Microsoft ActiveX Data Objects)を利用すると、文字コードを明示的に指定しながらCSVファイルを出力することができます。
Windows(Excel)以外のシステムへCSVファイルを取り込む際、文字コード(UTF-8やShift-JISなど)の不一致による文字化けを防ぐために有効な方法です。
前提条件・参照設定
VBAからADODB.Streamを利用するには、VBEの「ツール」>「参照設定」から以下のライブラリにチェックを入れるか、または遅延バインディングを利用する必要があります。
- Microsoft ActiveX Data Objects x.x Library
サンプルコード
アクティブシートの使用範囲(UsedRange)のデータを読み込み、指定した文字コードでCSVファイルとして保存する最小実行例です。
Sub ADODBStreamを利用したコード変換機能付きCSVファイル出力()
Dim i As Long
Dim j As Long
Dim strList As String
Dim FileName As String
Dim Charset As String
FileName = "C:\MyCSVlist_UTF8_OUT.csv" 'CSVファイルの保存先パスを指定
Charset = "UTF-8" ' "UTF-8" または "Shift-JIS" などを指定
Dim ADOBStream As Object
Set ADOBStream = CreateObject("ADODB.Stream")
Dim Ws As Worksheet
Set Ws = ActiveSheet
With ADOBStream
.Type = 2 ' adTypeText
.Charset = Charset
.Open
End With
' 行データを作成して書き込み
Dim lastRow As Long, lastCol As Long
lastRow = Ws.UsedRange.Rows.Count
lastCol = Ws.UsedRange.Columns.Count
Dim r As Long, c As Long
For r = 1 To lastRow
strList = ""
For c = 1 To lastCol
If c > 1 Then
strList = strList & ","
End If
strList = strList & Ws.Cells(r, c).Text
Next c
ADOBStream.WriteText strList, 1 ' adWriteLine
Next r
' ファイルへ保存(既存ファイルは上書き)
ADOBStream.SaveToFile FileName, 2 ' adSaveCreateOverWrite
' 終了処理
ADOBStream.Close
Set ADOBStream = Nothing
MsgBox "CSVファイルの出力が完了しました:", vbInformation
End Sub
注意事項・トラブルシューティング
ADODB.StreamでUTF-8を指定してファイルを出力する場合、BOM(Byte Order Mark)が付加されます。BOMなしのUTF-8で出力する必要がある場合は、追加のバイナリ処理が必要になるため注意してください。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 追加必要な参照設定や前提条件、実行手順についての説明を追加しました。
- 変更コードブロックのHTML出力を整理し、読みやすく整形しました。
