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)

・引数

・戻り値


■ 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