• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAで検索する)

Excel VBAで検索する方法と解決法

このQ&Aのポイント
  • Excel VBAを使用してSheet1に貼り付けたテキスト内から指定のキーワードを検索し、Sheet3に一致する行を貼り付ける処理がうまくいかない問題について解決法を紹介します。
  • 問題の原因は、ソースコードの一部に誤りがあるためです。mojiとwordの定義とInStr関数の使用方法に修正が必要です。
  • mojiとwordの定義は、Worksheets関数の引数に間違ったセルの位置を指定しているため、正しい位置を指定する必要があります。InStr関数の使用方法も間違っており、キーワードが見つかった場合に正しく処理されないため、修正が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

  例えば、j=10 のときキーが含まれていた場合 (1)Exit For なし    必要ないのに、残りの行(J=11~21)まで繰り返してしまう (2)Exit For あり    残りの行(j=11~12)をジャンプしFor~Nextを抜ける 要するにチェックの必要ない行をジャンプさせてるわけです。 今回のようにデータ数が少ない場合はExit FOrはなくてもいいのですが、、 For j=1 to 30000 のように30000セルまでチェックするとした場合 J=10 でキーが含まれていたら、そこでFor Nextを抜けないと 残り11~30000行までの29990回無駄な繰り返すことになりますよね。   これで説明になってますか? 以上ここまで。  

その他の回答 (1)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

普通このような検索がらみのコードでは、質問者のコードのようにはしませんが 折角ここまで作成してあるので今回は質問者のコードを修正することにします。 提示のコードから推測すると   Sheet1:データは、A3~A103 Sheet2:キーは、B2~B21 Sheet3:A1から転記 となってますが宜しいですね。 '------------------------------------  Sub Test()  Dim moji As String  Dim word As String  Dim result As Integer  Dim i As Integer  Dim j As Integer  Dim k As Integer  For i = 3 To 103    moji = Worksheets("Sheet1").Cells(i, 1).Value    For j = 2 To 21      word = Worksheets("Sheet2").Cells(j, 2).Value      result = InStr(moji, word)      If result <> 0 Then        k = k + 1        Worksheets("Sheet3").Cells(k, 1).Value = moji        Exit For      End If    Next j  Next i End Sub '------------------------------------------- 普通はFindメソッドなど高速に検索できるものを使用します。 以上ここまで。  

BEYONETTA
質問者

お礼

望んだ通りの結果になりました。ありがとうございます。 ただ、少し自分の理解が足りないので、 1つ質問させていただきたいのですが、 mojiの中にwordが含まれていた場合のExit Forの後の処理の流れがよく分からないので、詳しく教えてください。

関連するQ&A