Excelでデータを扱っているときに「条件に一致するセルを一括で取得したい」という場面は非常に多いです。例えば「売上が100以上のセルをすべて探したい」「商品名に『りんご』を含むセルだけを抽出したい」といったケースです。手作業の検索やフィルターでも対応可能ですが、繰り返しの作業を自動化するならExcelVBAで条件一致セルをまとめて取得するのが効率的です。
この記事では「vba 条件に一致するセルを取得 複数」をテーマに、初心者でも分かりやすい基本の書き方から、実務で役立つ応用サンプルまでを丁寧に解説します。Find、For Each、SpecialCellsなどの手法を比較しながら、最適な選び方も紹介します。
目次
- ✅ 条件一致セルを複数取得する3つの基本アプローチ
- ・Find+FindNextを使う
- ・For Each+Ifを使う
- ・SpecialCellsを使う
- ✅ Find+FindNextで条件一致セルを取得する
- ・基本構文
- ✅ For Each+Ifで条件一致セルを走査する
- ・基本コード
- ✅ SpecialCellsで条件一致セルをまとめて取得
- ・空白セルを取得
- ・数式セルを取得
- ・エラーセルを取得
- ✅ 実務で役立つ応用サンプル集
- ・条件一致セルを色付けする
- ・一致セルを別シートに一覧出力
- ・一致セルの行全体をコピー
- ・一致セルの件数をカウント
- ✅ 条件一致セル取得での注意点
- ✅ 条件一致セル取得の使い分け方
- ■ まとめ:条件一致セルを複数取得して業務を効率化しよう
✅ 条件一致セルを複数取得する3つの基本アプローチ
・Find+FindNextを使う
Excelの検索機能を呼び出す方法で、高速かつ効率的。複数セルを探す場合はFindNextを組み合わせます。
・For Each+Ifを使う
セルを順番に走査し、条件を判定する方法。処理はやや遅いですが複雑条件に強いです。
・SpecialCellsを使う
空白やエラーなどExcelが持つ特殊条件に基づいて一括でセルを取得できます。
✅ Find+FindNextで条件一致セルを取得する
・基本構文
Sub FindMultipleCells()
Dim rng As Range
Dim firstAddress As String
With Range("A1:A100")
Set rng = .Find("りんご", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
Debug.Print "ヒット:" & rng.Address & " 値=" & rng.Value
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub
手順
- 検索範囲を指定(例:
A1:A100)。 Findで検索語を指定。- 最初の一致セルのアドレスを保存。
FindNextで次の一致セルを順に取得。- 最初のセルに戻ったら終了。
実務例
- 顧客名リストから「山田」を含む全セルを抽出。
- ステータス列から「未処理」のセルだけを探す。
✅ For Each+Ifで条件一致セルを走査する
・基本コード
Sub LoopCheckCells()
Dim c As Range
For Each c In Range("B2:B100")
If c.Value >= 100 Then
Debug.Print "条件一致:" & c.Address & " 値=" & c.Value
End If
Next c
End Sub
手順
- 範囲内のセルを1つずつループ。
Ifで条件判定(例:100以上)。- 一致すれば処理を実行。
利点
- 柔軟な条件式を追加できる。
- 複数列の値を組み合わせた判定も可能。
実務例
- 「商品名がりんご かつ 売上が100以上」のセルを抽出。
- 「日付が本日 かつ ステータスが未処理」のセルをチェック。
✅ SpecialCellsで条件一致セルをまとめて取得
・空白セルを取得
Sub GetBlanks()
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
End Sub
参考:【VBA】特定のセル(空白セル・数式セル・エラーセル)を見つけ出す:SpecialCells メソッド・数式セルを取得
Range("A1:A100").SpecialCells(xlCellTypeFormulas).Interior.Color = vbYellow
・エラーセルを取得
Range("A1:A100").SpecialCells(xlCellTypeFormulas, xlErrors).Interior.Color = vbRed
利点
- 一括でセルを取得でき、処理が非常に速い。
- エラーや空白チェックに強い。
✅ 実務で役立つ応用サンプル集
・条件一致セルを色付けする
Sub HighlightCells()
Dim c As Range
For Each c In Range("B2:B100")
If InStr(c.Value, "限定") > 0 Then
c.Interior.Color = vbYellow
End If
Next c
End Sub
参考:【VBA】条件に一致するセルを取得する方法|Find・For Each・SpecialCells・一致セルを別シートに一覧出力
Sub ExportMatches()
Dim c As Range, wsOut As Worksheet
Dim r As Long
Set wsOut = Sheets("抽出結果")
r = 1
For Each c In Range("A2:A100")
If c.Value = "重要" Then
wsOut.Cells(r, 1).Value = c.Value
wsOut.Cells(r, 2).Value = c.Address
r = r + 1
End If
Next c
End Sub
参考:【VBA】オートフィルターに複数条件を設定する方法|業務効率を劇的に上げるフィルター自動化・一致セルの行全体をコピー
Sub CopyMatchedRows()
Dim rng As Range, firstAddress As String, wsOut As Worksheet
Dim r As Long
Set wsOut = Sheets("結果")
r = 1
With Range("A1:A100")
Set rng = .Find("確認", LookAt:=xlPart)
If Not rng Is Nothing Then
firstAddress = rng.Address
Do
rng.EntireRow.Copy wsOut.Rows(r)
r = r + 1
Set rng = .FindNext(rng)
Loop While Not rng Is Nothing And rng.Address <> firstAddress
End If
End With
End Sub
参考:【VBA】特定の文字を含む行の処理:検索・削除・別シートにコピー・一致セルの件数をカウント
Sub CountMatches()
Dim c As Range, cnt As Long
cnt = 0
For Each c In Range("B2:B100")
If c.Value >= 200 Then
cnt = cnt + 1
End If
Next c
MsgBox "条件に一致するセル数:" & cnt
End Sub
✅ 条件一致セル取得での注意点
- Nothing判定を必ず入れる
- Findで一致がなければ
Nothingを返すため、エラー回避に必須。
参考:【VBA】Findの戻り値を理解する方法|Nothing判定と実務での活用例を解説
- Findで一致がなければ
- 部分一致と完全一致の違いを理解する
LookAt:=xlPartとLookAt:=xlWholeで挙動が変わる。
参考:【VBA】特定の文字を含む行の処理:検索・削除・別シートにコピー
- SpecialCellsは対象がないとエラー
On Error Resume Nextでエラーを回避し、判定後に処理する。
参考:【VBA】特定のセル(空白セル・数式セル・エラーセル)を見つけ出す:SpecialCells メソッド
- 処理速度を考慮する
- 数万行規模のデータでは
Findが高速。 - 複雑条件は
For Eachが柔軟。 - 空白やエラーは
SpecialCellsが効率的。
- 数万行規模のデータでは
✅ 条件一致セル取得の使い分け方
- 高速検索したい場合 →
Find - 複雑条件で判定したい場合 →
For Each+If - 空白やエラーをまとめて処理したい場合 →
SpecialCells
実務ではこれらを組み合わせて使うのが効果的です。
■ まとめ:条件一致セルを複数取得して業務を効率化しよう
Find+FindNextで高速に複数セルを取得できる。For Each+Ifは柔軟で複雑条件に対応可能。SpecialCellsは空白やエラーなど特定条件のセルを一括取得できる。- 実務では「色付け」「コピー」「件数カウント」と組み合わせると便利。
- Nothing判定やエラー処理を組み込むことで安定したコードになる。
ExcelVBAで条件一致セルを複数取得する方法をマスターすれば、大量データから必要な情報を素早く抽出でき、日常業務の効率化に大きく役立ちます。ぜひ本記事のサンプルを活用して、自分の業務に合った自動化を実現してみてください。