- ベストアンサー
VBAを勉強中の私に教えてください!検索結果がおかしいです。
- VBAを勉強し始めた者が、検索結果がおかしい現象について質問しています。
- 質問者は、データの検索と着色を行うVBAプログラムを作成していますが、正常に動作しない問題に遭遇しています。
- 質問者は、データが入っている範囲に制限を設けて検索を行っているが、範囲を拡張するとエラーが出ると述べています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1) Set c = Worksheets("sheet1").Range(Cells(2, 1), Cells(maxrow, 1)).Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByRows) (2) Set d = Worksheets("sheet1").Range(Cells(2, 1), Cells(maxrow, 1)).Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByRows) この2式は、セットする変数(左辺)が違うだけで、処理内容(右辺)はまったく同じですよね。 これだと、1回目と2回目で、同じところを着色して、 If c.Address = d.Address Then MsgBox "検索終了" で必ず終了します。 というか、このコードは、Ifで条件分岐をさせているだけで、ループしてませんよね。 これだと、常に「'初めての検索処理」をして終わります。 VBEにおいて、F8キーでステップ実行させて、1行ごとの処理を確認することができます。 それをやって、実際の流れと、そのときの変数の値を把握しましょう。 あと、モジュールの先頭に、 Option Explicit と書いて、変数宣言をしないとエラーになるようにしたほうが良いですよ。
その他の回答 (1)
- nattocurry
- ベストアンサー率31% (587/1853)
(1) Set c = Worksheets("sheet1").Range(Cells(2, 1), Cells(maxrow, 1)).Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByRows) (2) Set d = Worksheets("sheet1").Range(Cells(2, 1), Cells(maxrow, 1)).Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByRows) この2式は、セットする変数(左辺)が違うだけで、処理内容(右辺)はまったく同じですよね。 これだと、1回目と2回目で、同じところを着色して、 If c.Address = d.Address Then MsgBox "検索終了" で必ず終了します。 というか、このコードは、Ifで条件分岐をさせているだけで、ループしてませんよね。 これだと、常に「'初めての検索処理」をして終わります。 VBEにおいて、F8キーでステップ実行させて、1行ごとの処理を確認することができます。 それをやって、実際の流れを把握しましょう。 あと、モジュールの先頭に、 Option Explicit と書いて、変数宣言をしないとエラーになるようにしたほうが良いですよ。 ちなみに、 Range("A2:"A" & maxrow) は Range("A2:A" & maxrow) こう書けば大丈夫です。
お礼
コメントありがとうございます。 >というか、このコードは、Ifで条件分岐をさせているだけで、ループしてませんよね。 >これだと、常に「'初めての検索処理」をして終わります。 そうです。この点をまず第一にして今プログラムを変えています。結構変わりそうですが、 >これだと、常に「'初めての検索処理」をして終わります。 にならないよう考えてみます。 >あと、モジュールの先頭に、 >Option Explicit >と書いて、変数宣言をしないとエラーになるようにしたほうが良いですよ。 ありがとうございます。ここは既にしてあります。 また分らなければよろしくお願いします。