• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAを勉強し始めた者です。)

VBAを勉強中の私に教えてください!検索結果がおかしいです。

このQ&Aのポイント
  • VBAを勉強し始めた者が、検索結果がおかしい現象について質問しています。
  • 質問者は、データの検索と着色を行うVBAプログラムを作成していますが、正常に動作しない問題に遭遇しています。
  • 質問者は、データが入っている範囲に制限を設けて検索を行っているが、範囲を拡張するとエラーが出ると述べています。

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

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.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 と書いて、変数宣言をしないとエラーになるようにしたほうが良いですよ。

crtlcdpdpel
質問者

お礼

コメントありがとうございます。 >というか、このコードは、Ifで条件分岐をさせているだけで、ループしてませんよね。 >これだと、常に「'初めての検索処理」をして終わります。 そうです。この点をまず第一にして今プログラムを変えています。結構変わりそうですが、 >これだと、常に「'初めての検索処理」をして終わります。 にならないよう考えてみます。 >あと、モジュールの先頭に、 >Option Explicit >と書いて、変数宣言をしないとエラーになるようにしたほうが良いですよ。 ありがとうございます。ここは既にしてあります。 また分らなければよろしくお願いします。

その他の回答 (1)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

(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) こう書けば大丈夫です。

関連するQ&A