- ベストアンサー
複数該当の検索処理でエラーになる(オブジェクト変数または With ブロック変数が設定されていません)
- 質問文章中に複数の該当データがある場合、最初の該当データ以外が検索結果セルに反映されない問題が発生しています。
- 次の検索が正しくヒットするためには、結果セルを正しく設定する必要があります。
- 結果セルが設定されていない場合には、エラーが発生します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
はずしてるかもしれませんが・・・ 最初の Set 結果セル = .Find("異動者", LookIn:=xlValues, LookAt :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 以後に、別の.Findしてるので、最後の Set 結果セル = .FindNext(結果セル) ←(1)次の検索該当セルが存在しても結果セルにNothingが返ってきてしまいます の検索条件が変わってしまっているのだと思います。 という訳で、最初に範囲を取得してしまうか、.Find以外の方法でチェックするといいと思います。 一番簡単な回避方法は(あまりお勧めではありませんが)、 Set 結果セル = .FindNext(結果セル) の前に、最初の検索と同じ条件のダミーの検索を入れる方法です。 Set dmy = .Find("異動者", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) を入れると、たぶん回避できると思います。 p.s. このプログラムが最初の"異動者"を探したシートのモジュール部にあるならいいのですが、標準モジュールにある場合は・・・ ダミーの検索の前にActiveSheetを設定する必要があるかもしれません
その他の回答 (2)
- fumufumu_2006
- ベストアンサー率66% (163/245)
ちょっとANo.2に補足です。 >findを複数回行うのはだめなんですね。 FindNextを使わないか、FindからFindNextの間に検索条件を変更するような別のFindを使わなければいいと思います。 ただし、意図的に複数の検索条件があるので複数のFindを行って、FindNextは1つという場合もあるかもしれません。
お礼
とてもわかりやすい説明ありがとうございます。 勉強になりました。 とりあえず、いまは複数のFindとFindNext1つで ダミーを追加し結果も正常でした♪ 本当に感謝です。 また機会があればご教授よろしくお願いします。
- fumufumu_2006
- ベストアンサー率66% (163/245)
>findを複数回行うのはだめなんですね。 FindNext使わなければいいんです。 >あまりお勧めでない・・・のはなぜでしょうか。。。 FindNextのためにダミーのFind入れるなら、最初から検索範囲のRange("A1:A37")を変数にして、最初はRange("A1:A37")、次はRange("A" & 前に見つかった行+1 &":A37")・・・とした方がいいかなと思ったんです。 それより、Find使わない方法もあります。 でも、あせって変更して動かなくなるより、ANo.1が原因なら、てっとり早い対処なのでと思ったんです。 まずは納期ですよね、やっぱり。
お礼
findを複数回行うのはだめなんですね。 find以外の方法だとループ処理しか思いつかず データが大量で非効率になってしまう為、 fumufmu_2006さんにアドバイスいただいた 『一番簡単な回避方法』で処理することにしました。 あまりお勧めでない・・・のはなぜでしょうか。。。 でも、うまくいったのでこれで期限に間に合いそうです! みづらいコードを解読&アドバイスいただき 本当にありがとうございます。 相談してみてよかったです(^^)