このページは
Findnextってどうやって組んだらいいんだっけ?
って調べたい方向けページです
事前の知識がついている前提で記事を書いています。
コードは勉強したけど、ちょっと忘れちゃったりエラーが出てしまう人向けです。
そのまま使えるようにしていますので、コピペして編集してください
Findnextの使い方
エクセルデータがありますね
このシートから「大砲」というワードをfindnextで検索したい!
コードはこちら
Sub 超かんたんfindnext() Dim 最初の検索 Dim 次回の検索 Dim 調べたいこと Dim 調べたいエリア 調べたいこと = "大砲" Set 調べたいエリア = ActiveSheet.Range("D5:D20") Set 最初の検索 = 調べたいエリア.Find(調べたいこと, LookIn:=xlValues, Lookat:=xlWhole) Set 次回の検索 = 最初の検索 Do ’ここにやりたいこと書く Set 次回の検索 = 調べたいエリア.FindNext(次回の検索) Loop Until 次回の検索.Address = 最初の検索.Address End Sub
検証
イミディエイトウィンドウに検索結果が問題なく出てますね。
debug.print と記載がある部分に、実行したいコードを入力しましょう
あとはdo loopで回してくれます
注意点
このコードだとfindで検索できなかったnothingに対応しておりません。
※単純な作りを確認したい用なので、極力簡素にしました。
検索条件を「完全一致」「値検索」にしてます。
検索の希望が違う人は修正してください
変数を日本語で宣言してますが、わかりやすくするためわざとです。
このコードを実際に使う場合は、下の内容を修正してから使いましょう
- if 文を入れて、エラー回避を行ってください
- 必要に応じて[Lookin][Lookat]を編集してください
- 変数を英語に変更してください
【良くするなら】
変数[調べたいエリア]がrange直打ちになってますが、Listobjectを指定したほうが安全です。
下のコードと差し替えましょう
Set 調べたいエリア = ActiveSheet.Range("a4").ListObject.ListColumns(4).Range
少しだけ解説
findnextはfindで探したセルの次から検索を始めます。
なのでfindnext単品だと使えません
Findで何も検索出来なかった場合は、findnextの部分もエラー回避をしなければいけませんのでご注意ください
Lookin、Lookatは省略できますが、事故の元なので書いたほうがいいです
Lookinの引数はxlValuesです。xlValueではありません
sがつきます。過去2回ほどこのミスに気づかずに1時間無駄にしたことがあります。
以上です。
VBA超かんたん説明は、長ったらしく説明されるのが嫌いな方向けのページになります
専門的なことは他のサイトが記載していただいているので、極力コードの目的に絞ったシンプルな情報を掲載していきます。