Excel VBAでFind 関数を使って検索する

2021年6月6日

Findは、Excelシート上の指定したセル範囲の中で、検索でヒットしたセルを取得します。
Find使用時に引数を指定することで全文一致か部分一致か条件を設定することができます。
また、検索方向を指定したり、「大文字と小文字」又は「半角と全角」を区別して検索が行えたりしますので柔軟な検索が行えます。
ただし、検索対象セルの値が式で表示されている場合は検索できませんので、VLookupやIndexとMatchを組み合わて検索するようにしましょう。
また、VLookupやIndexとMatchを組み合わた検索より処理速度が遅くなりますので、データ数が多い場合は注意が必要です。

Find メソッドを使って検索するサンプルアプリの説明

■ サンプルアプリの処理内容
 右の黄色の表のNo を検索して、該当する氏名を左の表(赤枠)にセットします。

 「Findの検索」ボタンをクリックすると右表のNoを検索してヒットした名前が赤枠にセットされます。

サンプルアプリのソースコード  コードの作成手順はこちら

Sub ボタン1_Click()

   '検索結果を入れるRange変数を定義
    Dim Rng As Range
   '検索してヒットした行番号を入れる変数を定義
    Dim HitRow As Long
  
   'ワークシートを指定する
    Dim Sh1 As Worksheet
    Set Sh1 = ThisWorkbook.Worksheets("Sheet1")

   '変数を定義する
    Dim workEndR1, workTmpR1 As Long, tmpStr1 As String
   'データの最終行を取得する
    workEndR1 = Sh1.Cells(Rows.Count, 2).End(xlUp).Row
    
    '6行目からデータの最終行までループ
    For workTmpR1 = 6 To workEndR1
    
        '検索キーをセット
        tmpStr1 = Sh1.Cells(workTmpR1, 2).Value
       
      'Findメソッドで検索実行 
       Set Rng = Sh1.Range("F:F").Find(What:=tmpStr1, LookAt:=xlWhole)

       '検索でヒットした場合は検索結果を名前欄にセットする。ヒットしなかった場合は無視する。
       If Not (Rng Is Nothing) Then

         'ヒットした行番号をセット
          HitRow = Rng.Row
         '検索結果をセットする
          Sh1.Cells(workTmpR1, 3).Value = Sh1.Cells(HitRow, 7).Value

       End If
           
    Next
     
End Sub

Findメソッドの説明

Findメソッドは引数を設定することにより様々な検索を行えます。引数の使い方については下の説明表を参照して下さい。


Object.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

 引数の説明

What検索するデータを指定  [省略不可]
After検索を開始するセルを指定。この引数に指定したセルの次のセルから検索を開始する
LookInxlFormulas検索対象を数式に指定
 xlValues検索対象を値に指定
 xlComents検索対象をコメント文に指定
LookAtxlPart一部が一致するセルを検索
 xlWhole全部が一致するセルを検索
SearchOrderxlByRows検索方向を列で指定
 xlByColumns検索方向を行で指定
SearchDirectionxlNext順方向で検索(デフォルトの設定)
 xlPrevious逆方向で検索
MatchCaseTRUE大文字と小文字を区別
 FALSE区別しない(デフォルトの設定)
MatchByteTRUE半角と全角を区別する
 FALSE区別しない(デフォルトの設定)
SearchFormatTRUE書式を検索する
 FALSE書式を検索しない