• ベストアンサー

VBAで表データの検索

アクティブセルの2列隣のデータを”Sheet2”から検索し、情報が見つかったセルの隣の列のデータをアクティブセルに返すために、下記のようなプログラムを組んでます。 ****************************************************** Set myRange=Worksheets("Sheet2").Range("A1:B256") B=ActiveCell.Offset(0,2) Set c=myRange.Find(B) ActiveCell.Value=C.Offset(0,1) ****************************************************** ほとんどうまくいくんですが、一部、期待と異なったデータが帰ってきます。例は以下のとおりです。   (1)検索値「#1」を検索すると、「#19」に該当するデータが帰ってくる   (2)検索値「#2」を検索すると、「#29」に該当するデータが帰ってくる   (3)検索値「#3」を検索すると、「#39」に該当するデータが帰ってくる   (4)検索値「#4」を検索すると、「#49」に該当するデータが帰ってくる   (5)検索値「#5」を検索すると、「#59」に該当するデータが帰ってくる   (6)検索値「#6」を検索すると、「#69」に該当するデータが帰ってくる   (7)検索値「#7」を検索すると、「#79」に該当するデータが帰ってくる   (8)検索値「N」を検索すると、アクティブセルの内容が消去される   (9)検索値「M」を検索すると、「14mm」に該当するデータが帰ってくる   (10)検索値「K」を検索すると、アクティブセルの内容が消去される。 なお、”Sheet2”には、#80、#79、#78・・・・と降順にデータが並んでおり、その後ろにA,B,C・・・とアルファベットが正順に並んでます。 何か、よい解決法はないでしょうか?

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

例えば、「#1」で検索したときに「#19」の前2文字の「#1」と一致しているとみなして処理されていると思われます。 検索が完全一致でよければ、  Set c = myRange.Find(What:=B, Lookat:=xlWhole) のような指定方法で行えばよろしいかと… なお、検索値がテーブルに無い場合を考慮すると、みつからない場合を  If c Is Nothing Then などで、チェックしておいたほうが良いと思われます。

Y-SAKATA
質問者

お礼

アドバイスいただいたとおりの指定方法を使ったら、解決しました。 ありがとうございました。

その他の回答 (1)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Range.Findメソッドの引数LookAtで、完全一致を指定すればどうなるでしょうか。 検索( Find、FindNext ) http://www.optimizm.jp/006/excelvba_find.shtml

Y-SAKATA
質問者

お礼

アドバイスいただいたように、引数LookAtで完全一致”xlWhole”をしていしたら解決しました。 ありがとうございました。

関連するQ&A