Excel VBAでテキストファイルから特定の文字列を含む行だけを抽出する方法

大量のログファイルやCSVファイルを扱う際に、特定のキーワードが含まれる行だけを抽出したいという場面はよくあります。
手作業で探すのは時間がかかりますが、VBAを使えば条件に一致する行だけを自動で抽出・貼り付けることが可能です。

本記事では、ADODB.Stream オブジェクトを使用し、Shift-JIS形式のテキストファイルから特定文字列を含む行だけを読み込むVBAマクロをご紹介いたします。


目次

想定するシナリオ

  • 読み込み対象は「logdata.csv」というShift-JISで保存されたテキストファイル
  • 各行にさまざまなメッセージが記録されている
  • この中から「ERROR」というキーワードを含む行だけを抽出し、Excelに貼り付ける

VBAコード:特定の文字列を含む行だけ抽出

Sub ExtractMatchingLines()
    Dim oneLine As String
    Dim currentCell As Range
    Set currentCell = ThisWorkbook.Worksheets(1).Range("B2") ' 出力開始セル
    
    With CreateObject("ADODB.Stream")
        .Charset = "Shift-JIS"
        .Type = 2 ' テキストモード
        .LineSeparator = -1 ' CRLF(Windows形式)
        .Open
        .LoadFromFile ThisWorkbook.Path & "\logdata.csv"
        
        Do While Not .EOS
            oneLine = .ReadText(-2)
            If oneLine Like "*ERROR*" Then
                currentCell.Value = oneLine
                Set currentCell = currentCell.Offset(1)
            End If
        Loop
        
        .Close
    End With
End Sub

処理の流れとポイント

処理内容解説
.LoadFromFileテキストファイルを読み込む
.ReadText(-2)1行ずつ読み込む(-2は1行単位の指定)
Like "*ERROR*"「ERROR」という文字列を含む行かを判定
.Offset(1) により行を移動見つかった行を連続してExcelに出力

出力結果のイメージ

B列に出力される行
2025/07/01,INFO,起動完了
2025/07/01,ERROR,通信失敗
2025/07/01,INFO,再試行開始
2025/07/01,ERROR,タイムアウト

「ERROR」を含む行のみが抽出され、整然と貼り付けられます。


応用ポイント

  • 部分一致ではなく完全一致が必要な場合は Like の代わりに If oneLine = "文字列" を使用します。
  • Like "*エラー*" のように、日本語のキーワードにも対応できます。
  • さらに進んで正規表現を使いたい場合は、VBScript.RegExp を使うことで柔軟な判定が可能です。

注意点

  • 文字コードは Shift-JIS を指定しています。UTF-8 の場合は Charset = "UTF-8" に変更してください。
  • 改行コード(LineSeparator)は通常 -1(CRLF)で問題ありませんが、UNIX系のファイルなら 10(LF)に変更してください。

まとめ

Excel VBA の ADODB.Stream を活用すれば、膨大なテキストファイルの中から特定キーワードを含む行だけを素早く抽出できます。
業務でのログ解析や、CSVファイルのフィルタリング作業など、時間短縮とミスの防止につながる便利なテクニックです。

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

この記事を書いた人

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

目次