セルのFindメソッド

あるセル範囲内において特定の情報を検索するには Find メソッドを使用します。Find メソッドは検索対象の情報が見つかるとその情報が含まれるセルオブジェクトを返し、1つも見つからなければNothingを返します。同じ検索を繰り返すときは、FindNext メソッドか、 FindPrevious メソッドを使用します。

スポンサーリンク

Findメソッドの使用方法

構文
object.Find( _
    What [, After] [, LookIn] [, LookAt] [, SearchOrder] _
    [, SearchDirection] [, MatchCase] [, MatchByte] [, SearchFormat] )

※objectはセルまたはレンジオブジェクトを表す変数

構文
object.FindNext( [After] )
構文
object.FindPrevious( [After] )
引数名 省略 定数/データ型 説明
What × Variant型 文字列などの検索データを指定します。
After Variant型 このセルの次のセルから検索が開始されます。 省略すると、対象セル範囲の左上端のセルが検索の開始点になります。
LookIn xlValues セルの値を検索対象とします。
xlFormulas セルの数式を検索対象とします。
xlComments セルのコメントを検索対象とします。
LookAt xlWhole 完全一致検索。 検索データが検索対象と完全一致した場合にのみセルオブジェクトを返却します。
xlPart 部分一致検索。 検索データが検索対象と部分一致した場合でもセルオブジェクトを返却します。
SearchOrder xlByRows 行を横方向に検索してから、次の行に移動します。
xlByColumns 列を下方向に検索してから、次の列に移動します。
SearchDirection xlNext 次の値を検索します。
xlPrevious 前の値を検索します。
MatchCase True 大文字と小文字を区別して検索します。
False 大文字と小文字を区別しないで検索します。 (既定値)
MatchByte True 半角文字と全角文字を区別して検索します。
False 半角文字と全角文字を区別しないで検索します。
SearchFormat Variant型 検索の書式を指定します。

Findメソッドの使用例

次のサンプルマクロは、検索キーワードをInputBox関数で受け付け、現在表示されているシート内を部分一致で検索する例です。検索結果として該当セル数の表示と塗りつぶしを行います。

FindNext などの同条件検索は指定された範囲の最後に達すると、範囲の最初に戻り、永遠と検索を繰り返してしまいます。こうならないために、最初に検索内容が見つかったセルのアドレスを保存しておきます。そして、検索を繰り返してこの最初のアドレスと同じセルが現れたら検索を終了するように処理をコントロールします。

Sub sample6_42()
    Dim myCell          As Range
    Dim keyWord         As String
    Dim firstAddress    As String
    Dim cnt             As Long     '自動的にゼロで初期化

    '検索キーワードの受け付け
    keyWord = InputBox("検索キーワードを入力してください。")

    If keyWord = "" Then
        '「キャンセル」か「×」ボタンが押下された場合
        'または検索キーワードが未入力だった場合
        MsgBox "検索をキャンセルしました。", vbExclamation
        End     '処理終了
    End If

    '現在表示されているシートの使用済みセル範囲を検索
    With ActiveSheet.UsedRange
        '背景色クリア
        .Interior.ColorIndex = xlNone

        '初回検索
        Set myCell = .Find(What:=keyWord, _
                           LookIn:=xlValues, _
                           LookAt:=xlPart, _
                           SearchOrder:=xlByRows, _
                           SearchDirection:=xlNext, _
                           MatchCase:=False, _
                           MatchByte:=False)

        '初回検索結果のチェック
        If Not myCell Is Nothing Then
            '初回検索セルのアドレスを退避
            firstAddress = myCell.Address

            'UsedRange内のセルを繰り返し検索
            Do
                '検索キーワードが見つかった場合
                cnt = cnt + 1
                myCell.Interior.Color = vbYellow

                'Next検索
                Set myCell = .FindNext(myCell)
            Loop Until myCell.Address = firstAddress
        End If

    End With

    '検索結果の表示
    If cnt = 0 Then
        MsgBox "検索キーワードなし", vbInformation
    Else
        MsgBox "検索が終了しました。" & String(2, vbLf) & _
               "■検索キーワード -> " & keyWord & vbLf & _
               "■該当セル数   -> " & cnt, _
                vbInformation
    End If
End Sub

 ワークシート内の使用済み領域(UsedRange) Setステートメント
InputBox関数  MsgBox関数 Do…Loop

以下の図がテスト用データです。ワークシートに都道府県名が入力されている状態です。

都道府県一覧
都道府県一覧

マクロを実行すると、InputBoxが表示されるので、ここに”島”と入力します。

島で検索
島で検索

すると、その結果がメッセージボックスに表示され、シートの該当セルが黄色で塗りつぶされました。

島で検索した結果
島で検索した結果
島で検索した結果
島で検索した結果

次は”山”と入力してみます。

山で検索
山で検索
山で検索した結果
山で検索した結果
山で検索した結果
山で検索した結果
タイトルとURLをコピーしました