Excel VBAでデータの連続検索を行う|Find、FindNextメソッドを使用する

Excelワークシートのセル範囲内で、指定した条件に合うデータを検索します。




Homeに戻る > Excel セルのTipsへ

Findメソッド実行後、さらに続けて検索するには、FindNextメソッドを使います。
ここでは下記の手順で作成しました。

  1. 検索元データが入力されているシートを作成します。
  2. 検索開始のコマンドボタンと、検索するデータの入力セルを配置します。
  3. ボタンがクリックされると、クリックイベントが発生し検索するVBAを実行します。
  4. Findメソッドで最初のデータを検索します。
  5. 見つかれば、FindNextメソッドで次のセルから検索します。


■ Findメソッドの構文

Range オブジェクト.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

・引数

  • What (必須)バリアント型 (Variant): 検索するデータです。バリアント型 (Variant)
  • After (省略可)バリアント型 (Variant): 検索を開始する一つ前のセルを指定。省略すると、対象セル範囲の左上端のセルになる
  • LookIn (省略可)バリアント型 (Variant): 情報の種類を指定
  • LookAt (省略可)バリアント型 (Variant): 使用できる定数は、XlLookAt クラスの 完全に同一なセルだけを検索(xlWhole) か 一部分でも一致するセルの検索(xlPart)
  • SearchOrder (省略可)バリアント型 (Variant): 使用できる定数は、XlSearchOrder クラスの クラスの 行方向に検索する(xlByRows) か 列方向に検索する(xlByColumns)
  • SearchDirection (省略可): XlSearchDirection 検索の方向を指定
  • MatchCase (省略可)バリアント型 (Variant): 大文字と小文字を区別するには、True を指定。既定値は False
  • MatchByte (省略可)バリアント型 (Variant): 2 バイト (全角) 文字の言語サポートが選択またはインストールされている場合にだけ使用できる。2 バイト文字が 2 バイト文字とだけ検索するようにするにはTrue を指定
  • SearchFormat (省略可)バリアント型 (Variant): 検索の書式を指定

・戻り値

  • 見つかった先頭のセルを表すRange オブジェクト
  • 見つからなかった場合、Nothing を返す

■ FindNextメソッドの構文

Range オブジェクト.FindNext(After)

・引数

After (省略可)バリアント型 (Variant): 行のときは右、列のときは下のセルから検索を開始。省略すると、セル範囲の左上隅のセルになる

・戻り値

見つかった先頭のセルを表すRange オブジェクト
検索範囲の最後になると、最初から検索を繰り返します。


Excel実行画面

検索する市町村に入力し、「検索」ボタンをクリックすると、結果をF列に、アドレスをG列に表示します。

Findメソッドで神戸市を検索した結果


Excel VBA実行コード

Option Explicit

'検索実行
Private Sub MyFindData(sf As String)
    Dim lrow As Long
    Dim trange As Range
    Dim sadr As String
    
    lrow = 4
    
    '市町村を検索
    Set trange = Range("C2", "C1948").Find(sf)
    If Not trange Is Nothing Then
        '見つかれば、最初に見つかったアドレスを保存
        sadr = trange.Address
        
        Do
            '見つかった位置に移動
            trange.Select
            'データ表示
            Cells(lrow, 6) = trange.Value
            '見つかった位置のアドレス
            Cells(lrow, 7) = trange.Address
            lrow = lrow + 1
            '次を検索
            Set trange = Range("C2", "C1948").FindNext(trange)
            '最初に見つかったアドレスと同じならばループを抜ける
            If sadr = trange.Address Then
                Exit Do
            End If
        Loop
    End If
    '開始位置へ
    Range("F2").Select
End Sub

Private Sub CommandButton1_Click()
    If Range("F2") = "" Then
        MsgBox "検索する市町村を入力してください。"
        Exit Sub
    Else
        '検索結果セルを消去
        Range("F4", "G100").Clear
        '検索実行
        MyFindData (Range("F2"))
    End If
End Sub



Homeに戻る > Excel セルのTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved