★ FindNextメソッドを使った複数検索    サンプルDL

検索結果が複数ある場合はFindNextメソッドを利用します。


 Findメソッドは最初に検索されたデータを返してきますが、データがいつも単一でしか存在しないということはありませんから、複数のデータを検索して、その処理をしたいときが出てきます。

そんなときに覚えておきたいのが、FindNextメソッドを使った検索です。前回のFindメソッドのファイルをもとに複数検索も出来るようにコードを書き換えていきましょう。



 シート上のテキストボックスやコマンドボタンはそのままで、今回はコードだけを修正します。

テキストボックスには、「txtkenskau」という名前で
コンボボックスには、「cmbkensaku」という名前のままです。

コードは赤字の部分が修正されたり追加された部分になります。
 

Private Sub cmdkensaku_Click()
Dim 検索氏名 As Variant

Dim firstAddress As Variant

 'まず検索用テキストボックスの中に文字の入力があるかどうかをチェックします。
If Not
txtkensaku.Value = Empty Then

 '氏名の列であるB列の中に検索する氏名があるかどうかをチェックします。
  Set 検索氏名 = Columns("B:B").Find(txtkensaku, LookIn:=xlValues)

 '検索結果が発見できれば、そのセルを赤くします。
    If Not 検索氏名 Is Nothing Then

 'Do〜Loop While の基本形です。
 ' 変数firstAddress に「検索氏名」のアドレスを代入します。
        firstAddress = 検索氏名.Address

    Do
 '今回の処理は検索セルに赤い色を付けます。
        検索氏名.Interior.ColorIndex = 3

 'ここでFindNextメソッドで検索氏名の次の検索へ移動します。
        Set 検索氏名 = Columns("B:B").FindNext(検索氏名)

 '検索値がなくなるか、検索値がひとつしかない場合にループから抜けます。
Loop While Not 検索氏名 Is Nothing And 検索氏名.Address <> firstAddress

 '検索結果が発見できなければ、次のメッセージを表示します。
    Else

        MsgBox "検索した氏名は登録されていません。残念!"
        txtkensaku.Value = Empty

    End If

Else


        MsgBox "検索する氏名を入力して下さい。よろしく!"

End If

End Sub

 

Do〜Loop Whileステートメントを使って、連続して検索を行うようにします。FindNextメソッドで最初に検索した値の次の値を検索させ、検索された値にセルを移動させます。

  Set 変数 = 範囲.Find(検索情報,LookIn:=xlvalues)
      If Not 変数 Is Nothing Then

         変数2 = 変数.Address

         Do

           検索に成功したときの処理〜

           Set 変数 = 範囲.FindNext(変数)

         Loop While Not 変数 Is Nothing And 変数.Address<>変数2

     End If

 


[前へ][トップ][次へ][サンプルファイルダウンロード]