このページは
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超かんたん説明は、長ったらしく説明されるのが嫌いな方向けのページになります
専門的なことは他のサイトが記載していただいているので、極力コードの目的に絞ったシンプルな情報を掲載していきます。

スポンサーリンク