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
を組み合わせることで、セルの中身ではなく書式を基準に検索することが可能になります。
特に色付きセルの抽出や、書式に基づくデータ整形を自動化したい場合に非常に便利なテクニックです。
目視によるチェックを減らし、作業ミスを防ぎつつ、効率よく正確なデータ収集を行いたい方は、ぜひ本手法をご活用ください。