大量のログファイルや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ファイルのフィルタリング作業など、時間短縮とミスの防止につながる便利なテクニックです。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
