Excelで「赤く塗られたセル」や「特定のフォント形式が使われているセル」を検索したいとき、手動では時間がかかってしまう場合があります。
本記事では、VBAを使って特定の書式を持つセルを一括検索し、その内容を別の場所に抽出する方法をご紹介いたします。
目次
想定される利用シーン
- エラーセルを赤色で塗っているが、その一覧を別表にまとめたい。
 - 条件付き書式で強調されたセルだけを抽出したい。
 - フォーマットに基づくデータ収集や分析を自動化したい。
 
VBAコードの例
以下のコードでは、範囲 B2:E11 の中から「塗りつぶし色が赤(ColorIndex = 3)」のセルを検索し、その値を H2 セルから縦に順に出力していきます。
Sub FindCellsByFormat()
    Dim searchRange As Range
    Dim firstHit As Range
    Dim hitCell As Range
    Dim outputCell As Range
    ' 検索対象範囲
    Set searchRange = ActiveSheet.Range("B2:E11")
    ' 出力開始セル
    Set outputCell = ActiveSheet.Range("H2")
    ' 検索書式の初期化と設定
    Application.FindFormat.Clear
    Application.FindFormat.Interior.ColorIndex = 3 ' 赤く塗られたセルを検索
    ' 書式一致セルの検索
    Set hitCell = searchRange.Find(What:="", SearchFormat:=True)
    If hitCell Is Nothing Then
        MsgBox "該当する書式のセルは見つかりませんでした。", vbInformation
        Exit Sub
    End If
    Set firstHit = hitCell
    Do
        outputCell.Value = hitCell.Value
        Set outputCell = outputCell.Offset(1, 0)
        Set hitCell = searchRange.Find(What:="", After:=hitCell, SearchFormat:=True)
    Loop While Not hitCell Is Nothing And hitCell.Address <> firstHit.Address
End Sub
ポイント解説
| 処理内容 | 説明 | 
|---|---|
Application.FindFormat.Clear | 検索条件に設定された書式を初期化します。 | 
Application.FindFormat.Interior.ColorIndex = 3 | 色番号 3(赤)を検索対象に設定します。 | 
SearchFormat:=True | 書式を検索対象とする指定。これが無いと意味を持ちません。 | 
Do...Loop | 複数該当セルがある場合にループ処理ですべて取得します。 | 
注意点と補足
ColorIndexはExcelの内部色番号で、環境によって表示色が微妙に異なることがあります。What:=""の指定は必須です。書式検索時には検索文字列は無視されますが、指定が必要です。- 数式セルや空白セルでも、該当書式であれば検索されます。
 
まとめ
VBAのFindメソッドにSearchFormat:=Trueを組み合わせることで、セルの中身ではなく書式を基準に検索することが可能になります。
特に色付きセルの抽出や、書式に基づくデータ整形を自動化したい場合に非常に便利なテクニックです。
目視によるチェックを減らし、作業ミスを防ぎつつ、効率よく正確なデータ収集を行いたい方は、ぜひ本手法をご活用ください。
