[VBA]Findメソッド範囲内検索はこれ!

Excel VBAのFindメソッドとは?

Excel VBAのFindメソッドは、特定の条件に一致するセルを検索するための便利な機能です。膨大なデータの中から特定の値や文字列を探し出す作業を簡単にするため、効率的なデータ処理には欠かせません。

この記事では、初心者にもわかりやすく、Findメソッドの基本的な使い方を解説します。また、特定の範囲内での検索や検索結果の活用方法も具体例を交えて説明します。

1.Findメソッドの基本構文

Findメソッドの基本構文は以下のようになります

Range.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)Sub FindExample()
主な引数の説明
  • What: 検索したい値や文字列を指定します(必須)
  • After: 検索を開始するセルを指定します(任意)
  • LookIn: 検索対象を値、数式、またはコメントのどれにするかを指定します(省略可)
  • LookAt: 完全一致(xlWhole)か部分一致(xlPart)を指定します(省略可)
  • SearchOrder: 行ごと(xlByRows)か列ごと(xlByColumns)を指定します(省略可)
  • SearchDirection: 次のセル(xlNext)か前のセル(xlPrevious)を指定します(省略可)
  • MatchCase: 大文字小文字を区別するかどうかを指定します(省略可)

2.Findメソッドで特定の値を検索する例

以下のコードは、特定の値を検索し、そのセルを選択する基本的な例です

Sub FindExample()
Dim targetCell As Range
Dim searchValue As String

 ' 検索する値を指定
 searchValue = "100"

 ' シート全体から検索
 Set targetCell = ActiveSheet.Cells.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)

 If Not targetCell Is Nothing Then
     MsgBox "値が見つかりました: " & targetCell.Address
 Else
     MsgBox "値は見つかりませんでした。"
 End If

End Sub

このコードでは、シート全体を検索し、”100″という値を含むセルを見つけた場合、そのセルのアドレスを表示します。

3.検索範囲を指定する方法

Sub FindInSpecificRange()
Dim targetCell As Range
Dim searchRange As Range
Dim searchValue As String

 ' 検索範囲と値を指定
 Set searchRange = ActiveSheet.Range("A1:D6")
 searchValue = "apple"

 ' 範囲内で検索
 Set targetCell = searchRange.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlPart)

 If Not targetCell Is Nothing Then
     MsgBox "値が見つかりました: " & targetCell.Address
 Else
     MsgBox "値は見つかりませんでした。"
 End If

End Sub

このコードでは、範囲A1:D10の中から”apple”を含むセルを検索します。部分一致(LookAt:=xlPart)を指定しているため、”apple pie”のような値も検索対象となります。

4.検索結果を使った具体的な操作例

次はFindメソッドを使って指定した文字列(例: "test")が含まれるセルを検索し、すべての一致するセルを黄色でハイライトするコードです。

Sub HighlightExactMatchCells()
Dim targetCell As Range
Dim searchRange As Range
Dim searchValue As String
Dim firstAddress As String

 ' 検索範囲と値を指定
 Set searchRange = ActiveSheet.Range("A1:D100")
 searchValue = "test"

 ' 範囲内で検索(完全一致に設定)
 Set targetCell = searchRange.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)

 If Not targetCell Is Nothing Then
    ' 最初のセルのアドレスを記録
    firstAddress = targetCell.Address

    Do
        ' 検索結果のセルを強調
        targetCell.Interior.Color = RGB(255, 255, 0) ' 黄色

        ' 次の検索結果を取得
        Set targetCell = searchRange.FindNext(targetCell)
    Loop While Not targetCell Is Nothing And targetCell.Address <> firstAddress
 Else
    MsgBox "値は見つかりませんでした。"
 End If

End Sub

“test”という文字の完全一致したものだけが黄色に全て変更されています。

LookAt:=xlWhole: 完全一致を指定しています。これにより、部分一致(例: test123)は検索対象外になります。

' 次の検索結果を取得
Set targetCell = searchRange.FindNext(targetCell)

Findメソッドで最初の一致するセルを取得した後、FindNextで次の一致するセルを取得しながらループを回します。

firstAddressを使って、最初に戻ってくるタイミングでループを終了します。

5.Findメソッドを使うときの注意点

①検索結果がNothingの場合

検索対象が見つからなかった場合、FindNothingを返します。そのため、If Not targetCell Is Nothingの条件を忘れないようにしましょう。

②After引数の設定

After引数を設定しない場合、検索はセルA1の次から始まります。ただし、検索は範囲の最後まで行われた後、先頭に戻って続行されます。

③LookInの注意

xlValuesxlFormulasを指定しない場合、意図しない結果が返ることがあります。適切な検索方法を選びましょう。

まとめ

Excel VBAのFindメソッドは、条件に一致するセルを簡単に検索できる強力なツールです。本記事で紹介した基本構文や実例を参考に、データ処理を効率化しましょう。

初心者でもわかりやすいコード例を活用し、自分のプロジェクトに応用してみてください!