Excel業務で必ずと言っていいほど出てくるのが「条件に合うセルを探す」処理です。
たとえば「売上が一定以上のセルを抽出」「文字列が一致するセルを検索」「空白セルだけを対象に処理する」など、日常業務に直結するニーズです。
この記事では「vba 条件に一致するセルを取得」というテーマで、ExcelVBAを使ってセルを効率的に探し出す方法を網羅的に解説します。
✅ VBAで条件に一致するセルを取得する基本的な考え方
✅ Range.Find を使った高速検索
✅ For Each と If を組み合わせる方法
✅ SpecialCells を使った特定条件セルの取得
✅ 複数条件での検索・抽出方法
✅ 実務で役立つサンプルコード集
✅ 注意点とエラー対策
目次
✅ 条件に一致するセルを取得する基本の考え方
VBAでセルを取得する方法は大きく3つに分かれます。
- Findメソッドで検索する(高速・最適解)
- For Each+Ifで判定する(柔軟・直感的)
- SpecialCellsでまとめて取得する(空白・数値・エラーなど)
場面によって使い分けるのがポイントです。
✅ Range.Findを使った条件検索
Find メソッドは、指定した値をシート内で素早く検索する機能です。
・ 基本構文
Dim rng As Range
Set rng = Range("A1:A100").Find(What:="条件値", LookAt:=xlWhole)
If Not rng Is Nothing Then
MsgBox "見つかったセル:" & rng.Address
End If
ポイント
What… 検索する値LookAt… 完全一致(xlWhole)か部分一致(xlPart)かを指定- 一致セルがない場合は
Nothingが返るため判定が必要
・ 例:売上100以上のセルを順に検索
Sub FindSales()
Dim rng As Range
Dim firstAddress As String
With Range("B2:B100")
Set rng = .Find(What:="100", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
MsgBox "ヒット:" & rng.Address & " 値=" & rng.Value
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub
Find と FindNext を組み合わせることで、複数一致セルを取得できます。
✅ For Each+Ifで条件を判定する
シンプルにすべてのセルを順番に見て、条件を満たすかチェックする方法です。
処理は遅めですが、複雑な条件分岐を扱える点がメリットです。
参考:【VBA】For Each を使ったセル範囲の操作方法
・ 基本構文
Dim c As Range
For Each c In Range("A1:A100")
If c.Value = "検索値" Then
MsgBox "見つかりました:" & c.Address
End If
Next c
・ 例:数値が100以上のセルだけ取得
Sub GetOver100()
Dim c As Range
For Each c In Range("B2:B100")
If IsNumeric(c.Value) And c.Value >= 100 Then
Debug.Print "行 " & c.Row & " 値=" & c.Value
End If
Next c
End Sub
✅ SpecialCellsで条件セルを一括取得
SpecialCells を使えば、特定の条件(空白、数式、定数、エラーなど)に合うセルを一括で取得できます。
参考:【VBA】特定のセル(空白セル・数式セル・エラーセル)を見つけ出す:SpecialCells メソッド
・ 空白セルを取得
Dim rng As Range
On Error Resume Next
Set rng = Range("A1:A100").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rng Is Nothing Then
rng.Select
MsgBox "空白セルを選択しました"
End If
・ 数式セルを取得
Range("A1:A100").SpecialCells(xlCellTypeFormulas).Interior.Color = vbYellow
・ エラーセルを取得
Range("A1:A100").SpecialCells(xlCellTypeFormulas, xlErrors).Interior.Color = vbRed
✅ 複数条件でセルを検索する
業務では「A列が商品名='りんご' かつ B列が100以上」といった複数条件もよくあります。
・ 例:複数条件判定
Sub MultiCondition()
Dim i As Long
For i = 2 To 100
If Cells(i, 1).Value = "りんご" And Cells(i, 2).Value >= 100 Then
Debug.Print "ヒット:" & Cells(i, 1).Address & " 値=" & Cells(i, 2).Value
End If
Next i
End Sub
If を組み合わせることで柔軟な検索が可能です。
✅ 実務で役立つサンプルコード集
・ 例1:最初に見つかったセルを選択
Sub FirstMatch()
Dim rng As Range
Set rng = Range("A:A").Find("完了", LookAt:=xlWhole)
If Not rng Is Nothing Then rng.Select
End Sub
・ 例2:条件一致セルに色を付ける
Sub HighlightCells()
Dim c As Range
For Each c In Range("B2:B100")
If c.Value >= 200 Then
c.Interior.Color = vbYellow
End If
Next c
End Sub
・ 例3:一致セルの一覧を別シートに出力
Sub ExportMatches()
Dim ws As Worksheet, wsOut As Worksheet
Dim c As Range, rowOut As Long
Set ws = ThisWorkbook.Sheets("データ")
Set wsOut = ThisWorkbook.Sheets("抽出結果")
rowOut = 1
For Each c In ws.Range("A2:A100")
If c.Value = "重要" Then
wsOut.Cells(rowOut, 1).Value = c.Value
wsOut.Cells(rowOut, 2).Value = c.Row
rowOut = rowOut + 1
End If
Next c
End Sub
✅ 注意点とエラー対策
- FindメソッドはNothing判定必須
- 一致しない場合エラーにはならないが、
Nothingのまま。
- 一致しない場合エラーにはならないが、
- SpecialCellsは対象がないとエラー
On Error Resume Nextで回避し、判定後に処理。
- 部分一致と完全一致の違い
LookAt:=xlPartとxlWholeを使い分ける。
- 速度を意識した使い分け
- 単一値検索 → Find
- 複雑条件 → For Each
- 特殊条件(空白やエラー) → SpecialCells
■ まとめ
ExcelVBAで「条件に一致するセルを取得」する方法は大きく分けて3つです。
- Findメソッド … 高速検索に最適
- For Each+If … 複雑条件の判定に柔軟
- SpecialCells … 空白・エラー・数式セルを一括取得
実務では「条件一致セルの色付け」「一覧抽出」「データ集計」など様々なシーンで役立ちます。
ぜひ本記事のサンプルコードを活用し、自動化効率をさらに高めてみてください。