Excelで一覧表を見ていると、 特定のキーワードを含む行だけを目立たせたい と思うことはありませんか?
たとえば、次のようなケースです。
- 「未対応」「エラー」「要確認」と書かれた行を目立たせたい
- クレーム・注意事項を含むデータだけ色付けしたい
- 重要なステータスの行を一瞬で判別したい
条件付き書式でも対応できますが、 文字列が複雑だったり、毎回同じ処理をしたい場合はVBAのほうが便利です。
そこで今回は、指定した文字列を含む行だけを自動で色付けするExcelVBAマクロをご紹介します。
この記事でできること
- 指定列に特定文字列が含まれているかを判定
- 該当行だけ背景色を変更
- 部分一致(含まれていればOK)に対応
- 色・列・キーワードを自由に変更可能
想定するデータ例
例として、次のような表を想定します。

この中で、
C列に「未対応」という文字列を含む行だけを色付けします。
特定文字列を含む行だけ色付けするマクロ(コピペOK)
以下のコードを標準モジュールに貼り付けてください。
Option Explicit
Sub HighlightRowsByKeyword()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
' ===== 設定項目 =====
Set ws = ActiveSheet
Const TARGET_COL As Long = 3 ' 判定する列(C列=3)
Const KEYWORD As String = "未対応" ' 検索する文字列
Const COLOR_R As Long = 255 ' 色(赤)
Const COLOR_G As Long = 230
Const COLOR_B As Long = 230
' ====================
' 最終行を取得(A列基準)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 行ごとにチェック
For r = 2 To lastRow
If InStr(ws.Cells(r, TARGET_COL).Value, KEYWORD) > 0 Then
' 行全体を色付け
ws.Rows(r).Interior.Color = RGB(COLOR_R, COLOR_G, COLOR_B)
Else
' 該当しない行は色を解除
ws.Rows(r).Interior.ColorIndex = xlColorIndexNone
End If
Next r
MsgBox "色付けが完了しました。", vbInformation
End Sub
コード解説(初心者向け)
① InStr で「文字列を含むか」を判定
If InStr(ws.Cells(r, TARGET_COL).Value, KEYWORD) > 0 Then
InStr は、 「指定した文字列が含まれているかどうか」を調べる関数です。
- 含まれている → 1以上
- 含まれていない → 0
完全一致ではなく、部分一致で判定できるのがポイントです。
② 行全体を色付けする方法
ws.Rows(r).Interior.Color = RGB(255, 230, 230)
この指定で、 該当する行すべてのセルが色付けされます。
③ 設定項目を変えるだけで使い回せる
次の部分を変更すれば、どんな表にも対応できます。
TARGET_COL:判定したい列KEYWORD:探したい文字列RGB:色
応用例
① 複数のキーワードを対象にしたい
If InStr(cell.Value, "未対応") > 0 _
Or InStr(cell.Value, "要確認") > 0 Then
② 大文字・小文字を区別せずに判定したい
If InStr(1, cell.Value, KEYWORD, vbTextCompare) > 0 Then
③ 色付けではなく文字色を変えたい
ws.Rows(r).Font.Color = RGB(255, 0, 0)
実行手順
- 対象のデータがあるシートを表示
- Alt + F11 → VBAエディタを起動
- 「挿入」→「標準モジュール」
- マクロを貼り付け
- HighlightRowsByKeyword を実行
まとめ:重要な行はVBAで一瞬で見える化
特定の文字列を含む行だけを色付けできると、
- チェック漏れが減る
- 作業効率が上がる
- 目視確認が楽になる
というメリットがあります。
条件付き書式が合わないケースでも、 VBAなら柔軟にルールを作れるのが強みです。
ぜひ、あなたのExcel業務に取り入れてみてください。


コメント