VBAで自動化 VBA一覧 抽出・検索処理 検索・Findメソッド

【VBA】文字列検索をFindで行う方法|セルの位置取得から応用テクニックまで解説

Excelで大量のデータを扱うときに「特定の文字列をどこに入力したのか分からない」「特定のキーワードが含まれるセルを探したい」という場面は日常的に発生します。手作業で検索してもよいですが、数千行にも及ぶデータを毎回探すのは非効率です。そんなときに役立つのが ExcelVBAのFindメソッドを使った文字列検索 です。

この記事では「vba 文字列検索 find」をテーマに、基本的な使い方から複数セルの検索、実務で使える応用例までを徹底解説します。初心者でも分かりやすい手順説明とコード例を用意していますので、ぜひ業務効率化に役立ててください。

✅ Findメソッドの基本

・Findメソッドの構文

Findメソッドは、指定範囲から特定の文字列を検索し、そのセルを返す機能を持ちます。

Set 検索結果Range = 検索範囲.Find(What:="検索文字列", LookAt:=xlPart)

主要な引数は次の通りです。

  • What … 検索文字列
  • LookAt … 部分一致(xlPart)か完全一致(xlWhole)
  • MatchCase … 大文字小文字を区別するかどうか
  • SearchOrder … 行単位で探すか列単位で探すか

    参考:【VBA】Findメソッド:基本構文と使用例


・最初の一致セルを取得する例

Sub FindFirstCell()
    Dim rng As Range
    Set rng = Range("A1:A100").Find(What:="りんご", LookAt:=xlPart)
    
    If Not rng Is Nothing Then
        MsgBox "見つかったセル:" & rng.Address & " 値=" & rng.Value
    Else
        MsgBox "該当データはありません"
    End If
End Sub

✅ 完全一致と部分一致を指定する

・完全一致検索

セルの内容全体と完全に一致する場合だけヒットさせたい場合は LookAt:=xlWhole を指定します。

参考:【VBA】Findを使って完全一致検索を行う方法|LookAt:=xlWholeの実務活用例

Set rng = Range("A1:A100").Find(What:="A1001", LookAt:=xlWhole)

・部分一致検索

セルの一部に検索文字列が含まれていればヒットさせたい場合は LookAt:=xlPart を使います。

Set rng = Range("A1:A100").Find(What:="りんご", LookAt:=xlPart)

✅ 複数セルを検索する(FindNext)

・FindNextを使った繰り返し検索

Findは最初の一致セルしか返さないため、複数一致セルを探すにはFindNextを組み合わせます。

Sub FindAllCells()
    Dim rng As Range
    Dim firstAddress As String
    
    With Range("A1:A100")
        Set rng = .Find(What:="りんご", 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

手順

  1. 最初の一致セルを取得し、そのアドレスを保存。
  2. FindNextで次の一致セルを順に探す。
  3. 最初のセルに戻るまで繰り返す。

✅ 実務で役立つFindの応用例

・一致セルを色付けする

Sub HighlightMatches()
    Dim rng As Range, firstAddress As String
    With Range("A1:A100")
        Set rng = .Find("重要", LookAt:=xlWhole)
        If Not rng Is Nothing Then
            firstAddress = rng.Address
            Do
                rng.Interior.Color = vbYellow
                Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> firstAddress
        End If
    End With
End Sub

・一致セルの行を別シートにコピー

Sub CopyMatchedRows()
    Dim rng As Range, wsOut As Worksheet
    Dim firstAddress As String, rowOut As Long
    
    Set wsOut = Sheets("抽出結果")
    rowOut = 1
    
    With Range("A1:A100")
        Set rng = .Find("完了", LookAt:=xlWhole)
        If Not rng Is Nothing Then
            firstAddress = rng.Address
            Do
                rng.EntireRow.Copy wsOut.Rows(rowOut)
                rowOut = rowOut + 1
                Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> firstAddress
        End If
    End With
End Sub

・一致件数を数える

Sub CountMatches()
    Dim rng As Range, firstAddress As String
    Dim cnt As Long
    
    cnt = 0
    With Range("A1:A100")
        Set rng = .Find("未処理", LookAt:=xlWhole)
        If Not rng Is Nothing Then
            firstAddress = rng.Address
            Do
                cnt = cnt + 1
                Set rng = .FindNext(rng)
            Loop While Not rng Is Nothing And rng.Address <> firstAddress
        End If
    End With
    MsgBox "一致件数:" & cnt
End Sub

✅ Findを使うときの注意点

・Nothing判定を忘れない

検索結果が見つからない場合は Nothing になるため、判定を必ず入れる必要があります。

・検索条件の引き継ぎに注意

Findは最後に使った条件を保持しているため、常に引数を明示的に指定することが推奨されます。

・大文字小文字の扱い

MatchCase:=True を指定すると、大文字小文字を区別した検索になります。

・処理速度

数千行~数万行の検索でも高速に処理できるのがFindの強みです。


✅ Findと他の検索方法の違い

  • Find:高速。セル単位で検索してセルを返す。
  • InStr:セル内の文字列中で検索対象が含まれる位置を返す。
  • ループ+If:柔軟だが処理は遅め。複雑条件に向いている。

実務では 基本はFind、細かい条件はInStrやループで補完 という使い分けがおすすめです。

参考:【VBA】(セル内)特定の文字の最初の位置を検索(InStr関数の使用方法)


■ まとめ:VBAでFindを使った文字列検索をマスターしよう

  • Findはセル検索を自動化できる便利なメソッド。
  • 完全一致は LookAt:=xlWhole、部分一致は LookAt:=xlPart
  • 複数セルを検索するときは FindNext を利用する。
  • 実務では「色付け」「コピー」「件数カウント」と組み合わせると効果的。
  • Nothing判定や検索条件の引き継ぎに注意する。

ExcelVBAでFindをマスターすれば、大量データの中から必要な情報を正確かつ高速に抽出でき、日常業務の効率化につながります。ぜひ本記事のサンプルを活用して、自分の作業を自動化してみてください。

    -VBAで自動化, VBA一覧, 抽出・検索処理, 検索・Findメソッド