Excel VBAでテキストファイルの任意の位置から数行だけ読み込む方法(EUC-JP対応)

大量のログファイルやテキストデータの中から、特定の行だけを抽出したいというケースは少なくありません。とくに、ファイルが大きすぎてすべて読み込むとパフォーマンスに影響する場合には、行番号を指定して必要な部分だけを読み込む方法が効果的です。

本記事では、Excel VBAと ADODB.Stream を活用し、EUC-JPでエンコードされたテキストファイルから、任意の行位置から特定行数だけ読み込む方法をご紹介いたします。


目次

シナリオの想定

  • 読み込むファイルは systemlog_euc.txt(EUC-JP形式で保存)
  • 10行目から3行分だけ読み取り、Excelシートに表示
  • ファイル全体を読み込まず、必要部分だけ効率的に取り出す

VBAコード:指定行から指定行数だけ読み込む

Sub ReadPartialTextLines()
    Dim startLine As Long: startLine = 10
    Dim numberOfLines As Long: numberOfLines = 3
    Dim currentLine As Long
    Dim stream As Object
    Dim i As Long
    
    Set stream = CreateObject("ADODB.Stream")
    With stream
        .Charset = "EUC-JP"
        .Type = 2 ' テキストモード
        .LineSeparator = 10 ' 改行コード LF
        .Open
        .LoadFromFile ThisWorkbook.Path & "\systemlog_euc.txt"
        
        ' 読み飛ばし
        For currentLine = 1 To startLine - 1
            If .EOS Then Exit For
            .SkipLine
        Next
        
        ' 指定行数だけ読み取り
        For i = 1 To numberOfLines
            If .EOS Then Exit For
            ThisWorkbook.Worksheets(1).Cells(i, 1).Value = .ReadText(-2)
        Next
        
        .Close
    End With
End Sub

解説

処理内容説明
Charset = "EUC-JP"EUC-JP形式の文字エンコーディングに対応
LineSeparator = 10改行コードをLF(UNIX系)に設定
.SkipLine指定行まで読み飛ばす処理
.ReadText(-2)1行ずつ読み込む(-2は1行単位を意味)
.EOSファイルの終端判定(End Of Stream)

実行結果(イメージ)

A列に出力される内容
ログメッセージ10行目
ログメッセージ11行目
ログメッセージ12行目

注意点

  • ファイルが存在しない場合はエラーとなるため、事前にファイルパスや存在チェックを加えると安全です。
  • LineSeparator-1 に設定すれば、CRLFにも対応可能です(Windows形式の改行)。
  • EUC-JP以外の文字コードにしたい場合は、UTF-8Shift-JIS に変更可能です。

応用ポイント

  • 行の内容に応じてフィルタ処理や条件分岐を加えることも可能です。
  • 1行をカンマやタブで分割し、複数列に展開する処理を追加することでCSVにも応用できます。

まとめ

Excel VBAで ADODB.Stream を使えば、巨大なテキストファイルの中から必要な行だけをピンポイントで抽出することができます。
業務ログ、データレポート、連携ファイルなどを対象に、効率よく読み込む仕組みを構築する際にぜひお役立てください。

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

この記事を書いた人

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

目次