【VBAリファレンス|実務向け】[実務の現場で差がつく!Excel VBA「書式指定検索」をマスターする]

スポンサーリンク

なぜ「書式検索」が重要なのか

実務でExcelを扱っていると、「セルの値」ではなく「セルの色」や「太字」などの「書式」を頼りにデータを抽出したい場面に遭遇しませんか?例えば、上司がレビューで「修正が必要なセルを赤く塗っておいたから、その値だけ合計してほしい」といった依頼をしてくるケースです。
値であればIF文やCOUNTIF関数で簡単に抽出できますが、色やスタイルを条件にするには工夫が必要です。今回紹介するFindメソッドのSearchFormat引数を活用すれば、手作業でフィルタをかける手間を省き、一瞬で目的のセルを特定・集計できるようになります。

基礎知識:Findメソッドと書式検索の仕組み

VBAでセルを検索する際、最も強力なのがFindメソッドです。通常は「What」引数に値や文字列を指定しますが、書式を検索する場合は以下の手順を踏みます。

1. Application.FindFormatオブジェクトで、検索したい書式(背景色、フォントなど)をあらかじめ設定する。
2. FindメソッドのSearchFormat引数にTrueを指定する。

ここで最も重要な注意点があります。通常のFindメソッドで使うFindNextメソッドは、書式検索には対応していません。そのため、複数のセルを連続して検索する場合は、ループ処理の中でFindメソッドを繰り返し呼び出すという「少し特殊な書き方」が必要になります。

実装のポイント

以下のコードでは、指定した範囲内から「背景色が赤のセル」をすべて探し出し、その値を合計・算出する一連の流れを実装しています。

サンプルプログラム

Sub SearchByFormatExample()
Dim c As Range
Dim targetRange As Range
Dim firstAddress As String

‘ 1. 前回の検索設定をクリアし、今回検索する書式(背景色:赤)を指定
Application.FindFormat.Clear
Application.FindFormat.Interior.Color = vbRed

‘ 2. 検索範囲を設定(ここではアクティブシートのA1:A20と想定)
Set targetRange = Range(“A1:A20″)

‘ 3. 最初のセルを検索(SearchFormat:=Trueを忘れずに)
Set c = targetRange.Find(What:=””, SearchFormat:=True)

If c Is Nothing Then
MsgBox “指定された書式のセルは見つかりませんでした。”
Exit Sub
Else
firstAddress = c.Address
Dim resultRange As Range
Set resultRange = c

‘ 4. 次のセルを検索(FindNextではなく、再度Findメソッドを使用)
Do
Set c = targetRange.Find(What:=””, After:=c, SearchFormat:=True)

‘ 見つからなくなった、あるいは最初のセルに戻ったらループ終了
If c Is Nothing Then Exit Do
If c.Address = firstAddress Then Exit Do

‘ 見つかったセルをUnionで結合して範囲として保持
Set resultRange = Union(resultRange, c)
Loop
End If

‘ 5. 抽出した範囲に対して計算を実行
With WorksheetFunction
MsgBox “【赤色セルの統計】” & vbCrLf & _
“最小値:” & .Min(resultRange) & vbCrLf & _
“最大値:” & .Max(resultRange) & vbCrLf & _
“合計 :” & .Sum(resultRange)
End With
End Sub

応用と注意点:現場でハマらないために

1. 検索設定のクリアは必須:
Application.FindFormatはExcel全体の設定を変更します。実行前には必ず「Application.FindFormat.Clear」を実行し、前のマクロの設定が残らないようにしましょう。これを忘れると、意図しない書式が検索条件に含まれてしまい、バグの原因になります。

2. What引数について:
書式だけを検索したい場合でも、What引数には「””(ワイルドカード)」を指定するのが定石です。これにより「値が入力されているセル」かつ「指定書式のセル」を効率的に抽出できます。

3. 条件の複雑化:
フォントサイズや罫線など、複数の条件を組み合わせることも可能です。その場合は、Application.FindFormatのプロパティを複数設定してからFindメソッドを呼び出してください。

この手法を覚えておけば、複雑な色分けルールに基づいた集計業務を自動化でき、業務効率が劇的に向上します。ぜひご自身の環境でお試しください。

タイトルとURLをコピーしました