← コード一覧へ戻る
実務テキストファイル

テキストファイルを読み込む(ADODB.Streamを使う場合)

ADODB.StreamでUTF-8の小さなテキストファイルを読み、新規シートのA1へ全文を入れます。

実行前に確認

  • Windows専用でADOが利用できる環境が必要です。CreateObjectを使うためVBEの参照設定は不要です。
  • Charsetは元ファイルの文字コードに合わせます。ReadText(-1)は全文読み取りであり、行ごとのセル分割はしません。32,767文字を超える場合は中止します。

1サンプルコード

Sub ADODBStreamでテキストを読む()
    Dim stream As Object, ws As Worksheet
    Dim filePath As String, contents As String, message As String
    filePath = "C:\Data\sample.txt"
    On Error GoTo Failed
    Set stream = CreateObject("ADODB.Stream")
    stream.Type = 2 'adTypeText
    stream.Charset = "utf-8"
    stream.Open
    stream.LoadFromFile filePath
    contents = stream.ReadText(-1) 'adReadAll
    stream.Close
    Set stream = Nothing
    If Len(contents) > 32767 Then Err.Raise 6, , "1セルの文字数上限を超えます"
    Set ws = ThisWorkbook.Worksheets.Add
    ws.Range("A1").NumberFormat = "@"
    ws.Range("A1").Value = contents
    ws.Range("A1").WrapText = True
    Exit Sub
Failed:
    message = Err.Description
    On Error Resume Next
    If Not stream Is Nothing Then stream.Close
    On Error GoTo 0
    MsgBox message
End Sub

図で見る操作の流れ

イメージ図

コードに沿った概念図です。実際の画面や実行結果ではありません。

  1. 読取り前

    C:\Data\sample.txtを短いUTF-8テキストとして用意

  2. マクロ:全文取得

    ADODB.StreamでUTF-8として全文を読み、ストリームを閉じる

  3. マクロ:出力

    32,767文字以内なら新規シートを追加し、A1へ文字列で格納・折り返し表示

  4. 出力後

    改行も含めてA1の1セルに全文。元ファイルは変更なし

文字数上限超過なら出力前に中止。行別のセル分割はしません。ADOが利用できるWindows環境が必要です。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    Windows版のデスクトップExcelで練習用ブックを.xlsm形式で保存します。Alt+F11→[挿入]→[標準モジュール]に、この例だけを貼り付けます。

  2. 2

    UTF-8形式で保存した短いテキストを用意し、filePathを実際のパスへ変えます。

  3. 3

    実行するSubの内側にカーソルを置き、F5キーを押します。

  4. 4

    新規シートのA1に改行を含む全文が入り、日本語が正しく読めるか確認します。

使っている機能の公式ドキュメント(Microsoft Learn)