アクセス上位ページ
 
最近の更新内容
(6)-p.Sort メソッド ⇐ [PREV]
[NEXT] ⇒ (6)-r.AutoFilter メソッド

Excel VBA ≫ 1.基礎編 - セル・レンジ(6)-q.Find メソッド

【ページ内リンク】

Find メソッド

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

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




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

  • 引数名 省略 定数/
    データ型
    説明
    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型 検索の書式を指定します。


  • 【構文】
    object.FindNext ( [After] )
    object.FindPrevious ( [After] )
  • ※引数 [After] については上記 Find メソッドと同じです。

  • Find メソッドの使用例
  • 検索キーワードをInputBox関数で受け付け、現在表示されているシート内を部分一致で検索する例です。 検索結果として該当セル数の表示と塗りつぶしを行います。

    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
            '初回検索
            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
    

    <使用データ>
    現在表示されているシートには都道府県の一覧が記載されています。 都道府県一覧
  • 検索キーワードに"島"を入力して検索
  • 島で検索 島で検索した結果 島で検索した結果
  • 検索キーワードに"山"を入力して検索
  • ※前回検索時の塗りつぶしをクリアしたい場合はClearFormats(⇒(6)-m.Clear メソッド)などを組み込んでください。 山で検索 山で検索した結果 山で検索した結果
カテゴリ内ページ



Page
Top