VBAでADODB.Streamを使ってUTF-8ファイルを読み込む方法とセルへの展開方法

Excel VBAでファイルを読み込む方法は複数ありますが、文字コードの指定が必要な場合や細かく制御したい場合には ADODB.Stream を使う方法が有効です。

本記事では、ADODB.Stream オブジェクトを使用してUTF-8形式のCSVファイルを読み込み、Excelシートに展開する方法をご紹介いたします。


目次

想定するシナリオ

  • 読み込む対象は「data_utf8.csv」というUTF-8エンコードされたファイル
  • コンマ区切り(CSV形式)で1行ずつ読み取り
  • セルに1行ずつ分割して貼り付け

VBAコード:Streamで読み込み → シートに展開

Sub LoadUTF8CSVWithStream()
    Dim bufferText As String
    Dim lines As Variant
    Dim rowParts As Variant
    Dim i As Long
    Dim targetCell As Range
    
    ' UTF-8ファイルの読み込み
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Type = 2 ' テキストモード
        .Open
        .LoadFromFile ThisWorkbook.Path & "\data_utf8.csv"
        bufferText = .ReadText
        .Close
    End With
    
    ' セルの書き込み開始位置を設定(ここではA1)
    Set targetCell = ThisWorkbook.Worksheets(1).Range("A1")
    
    ' 行単位で分割
    lines = Split(bufferText, vbCrLf)
    
    For i = 0 To UBound(lines)
        rowParts = Split(lines(i), ",")
        targetCell.Offset(i, 0).Resize(1, UBound(rowParts) + 1).Value = rowParts
    Next
End Sub

ポイント解説

  • CreateObject("ADODB.Stream") を使用してテキストファイルを読み込む
  • .Charset = "UTF-8" を指定することで、UTF-8形式のファイルも文字化けせずに読み込める
  • 行単位に分割し、各行をカンマ区切りでセルに貼り付け
  • OffsetResize を併用することで行単位の貼り付けが簡潔

この方法が役立つ場面

シチュエーションなぜ有効か
UTF-8ファイルを正確に読みたいWorkbooks.OpenText より柔軟に対応
内容をプレビューや加工してから貼り付けたい一度文字列として読み込めるため
セルにカスタム配置したいOffsetResize で制御可能

注意点

  • ADODB.Stream は VBA で使えるCOMオブジェクトですが、PCによってはライブラリ登録が必要な場合があります。
  • UTF-8 BOM 付き・無しどちらにも基本的に対応できますが、文字化けが発生する場合は ADODB.Stream の代わりに Scripting.FileSystemObject を使う方法も検討してください。
  • ファイルに空行があると Split() の結果に空文字列が含まれるため、エラー処理を加えるとより堅牢になります。

まとめ

ADODB.Stream を使えば、Excel VBA でUTF-8のCSVファイルを文字化けさせずに正確に読み込むことが可能です。また、読み込んだデータをプログラム的に操作・整形できるため、柔軟なデータ処理が求められるシーンで大変有効です。

外部システムとのデータ連携や定型帳票作成などにぜひご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次