大量のログファイルや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ファイルのフィルタリング作業など、時間短縮とミスの防止につながる便利なテクニックです。