VBAのFindメソッド完全解説!検索処理の基本から応用まで

Excel VBAでよく使われる検索処理のひとつに「Findメソッド」があります。
セルの中から特定の値を探す時にとても便利ですが、使い方によっては正しく動作しなかったり、ループで全ての該当セルを探し出すのが難しかったりします。

この記事では、Findメソッドの基本的な使い方から、複数ヒットを取得する応用的な使い方までを解説します。実務に活かせるVBAコード付きでご紹介していきますので、ぜひ最後までお読みください。


Findメソッドとは?

VBAのFindメソッドは、指定した範囲内で特定の値を検索するための関数です。
Excelの「検索」機能と同じように動作し、条件に一致するセルを1つ返します。

Set 検索結果 = 範囲.Find(検索値, 検索開始位置, 検索方向, 比較方法, 検索の種類)

主な引数の意味

引数説明
What検索する値(必須)
After検索を開始するセル。ここから検索を開始(Afterの次のセルから探す)
LookIn検索対象(xlValues, xlFormulas など)
LookAt完全一致か部分一致か(xlWholeまたはxlPart
SearchOrder検索方向(xlByRowsまたはxlByColumns
SearchDirection検索順(xlNextまたはxlPrevious
MatchCase大文字と小文字を区別するか(TrueまたはFalse

基本的なFindの使い方

以下は、A列の中から「東京」という文字列を検索する基本的なコードです。

Sub FindSample()
Dim ws As Worksheet
Dim foundCell As Range

Set ws = ThisWorkbook.Sheets("Sheet1")
Set foundCell = ws.Range("A:A").Find(What:="東京", LookIn:=xlValues, LookAt:=xlWhole)

If Not foundCell Is Nothing Then
MsgBox "見つかりました!セルのアドレス: " & foundCell.Address
Else
MsgBox "見つかりませんでした。"
End If
End Sub

複数ヒットのFindNextによる検索方法

Findメソッドは最初の1件しか返さないため、複数の一致セルを探す場合はFindNextを使ってループする必要があります。

Sub FindAllMatches()
Dim ws As Worksheet
Dim firstAddress As String
Dim foundCell As Range

Set ws = ThisWorkbook.Sheets("Sheet1")
Set foundCell = ws.Range("A:A").Find("東京", LookIn:=xlValues)

If Not foundCell Is Nothing Then
firstAddress = foundCell.Address
Do
MsgBox "見つかりました: " & foundCell.Address
Set foundCell = ws.Range("A:A").FindNext(foundCell)
Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress
Else
MsgBox "該当データが見つかりません。"
End If
End Sub

Findを使う時の注意点

1. After引数の罠

Afterで指定したセル「の次のセル」から検索が始まります。AfterをRange("A1")にすると、A1自体は検索対象になりません。

2. Findの設定は保持される

Findの設定は、前回の検索設定がExcelに保持される仕様です。
LookInやLookAtは明示的に指定しましょう。

3. 大文字小文字の区別

MatchCase:=Trueを指定すると、「東京」と「東京」は一致しますが、「東京」と「TOKYO」は一致しません。


条件付きのFind(部分一致・大文字小文字区別など)

Sub FindPartialMatch()
Dim ws As Worksheet
Dim result As Range

Set ws = ThisWorkbook.Sheets("Sheet1")
Set result = ws.Range("A:A").Find(What:="京", LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)

If Not result Is Nothing Then
MsgBox "見つかりました: " & result.Address
End If
End Sub

複数列・全シートを対象に検索する

ワークシート全体を検索

Sub FindInAllSheets()
Dim ws As Worksheet
Dim foundCell As Range

For Each ws In ThisWorkbook.Sheets
Set foundCell = ws.UsedRange.Find("東京", LookIn:=xlValues)
If Not foundCell Is Nothing Then
MsgBox "シート '" & ws.Name & "' にて発見: " & foundCell.Address
End If
Next ws
End Sub

見つけたセルの隣の値を取得する例

Sub GetNextColumnValue()
Dim foundCell As Range

Set foundCell = Sheet1.Range("A:A").Find("東京", LookIn:=xlValues)
If Not foundCell Is Nothing Then
MsgBox "隣のセルの値: " & foundCell.Offset(0, 1).Value
End If
End Sub

Findの代わりに使えるMatchとの違い

機能FindメソッドMatch関数
一致条件完全一致 / 部分一致完全一致 / 近似一致
複数ヒットFindNextで対応1件のみ
対象範囲セル範囲なら柔軟に対応可能行や列
結果Range型数値(位置)

まとめ

Findメソッドは、Excel VBAで効率的な検索を行うために欠かせない機能です。
基本的な使い方を覚えておけば、業務での作業効率が格段に上がります。
特に、複数の一致を探す場合にはFindNextとの組み合わせが重要です。

Excelの検索機能に頼るだけでなく、VBAで自動化することで、より柔軟で強力な処理が可能になります。ぜひ、この記事を参考にFindメソッドをマスターしてください!

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