- 公開日:2016-12-18
- プロナビTOP / プログラミング初心者向け技術系ノウハウ・まとめ

検索条件に当てはまるセルが複数存在する場合はfindnextを使用します。
それでは、具体的なコードの書き方をご説明します。
Findnextを用いた複数検索
|
1 2 3 4 5 6 7 8 9 10 11 |
Dim myRange As Range ‘検索にヒットしたセルを記録’ Dim firstCell As Range ‘最初に検索にヒットしたセルを記録’ Set myRange = Cells.Find(what:=“大安”) ‘最初のFindで“大安”という語を検索するように設定’ If Not myRange Is Nothing Then ‘検索対象が1件以上ある場合に下記コードを実行’ Set firstCell = myRange Do Set myRange = Cells.FindNext(myRange) ‘()内のセルの次のセルから検索を続行’ MsgBox myRange.Row Loop While myRange.Address <> firstCell.Address ‘最初のセルに戻るまでDo~Loopを継続’ End If |
<解説>
FindnextはFindで実行した検索(3行目)を繰り返すコードです。
Find系の命令でNothingが返された場合は検索対象が無いという事なのでそのままコードを終了します。
そしてFindnextはDo~Loopで囲むことにより検索を繰り返すことができるようになります。
7行目のFindnextの次の括弧内に指定したセルの次のセルから検索を再開するので、
前回検索にヒットしたセルを指定しています。
また、Findnextで複数の検索対象にヒットした後、検索対象の終点に達するとまた最初に戻って検索を開始します。
つまり、最初に検索対象にヒットしたセルに再び戻った場合は一通り検索を終えたという事なので
While文の条件で検索終了としています。
まとめ
Findnextでは検索対象が複数存在する場合に検索を続行することができます。
シート内の検索対象をカウントしたりリストアップしたりしたい場合など応用範囲は広いですが、
検索終了のコードを入れないと延々と検索を続けてしまうので注意が必要です。
Findnextをループの処理と組み合わせてスマートにシートの情報を抽出してみましょう。































