- ベストアンサー
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・・・とアルファベットが正順に並んでます。 何か、よい解決法はないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば、「#1」で検索したときに「#19」の前2文字の「#1」と一致しているとみなして処理されていると思われます。 検索が完全一致でよければ、 Set c = myRange.Find(What:=B, Lookat:=xlWhole) のような指定方法で行えばよろしいかと… なお、検索値がテーブルに無い場合を考慮すると、みつからない場合を If c Is Nothing Then などで、チェックしておいたほうが良いと思われます。
その他の回答 (1)
- xls88
- ベストアンサー率56% (669/1189)
Range.Findメソッドの引数LookAtで、完全一致を指定すればどうなるでしょうか。 検索( Find、FindNext ) http://www.optimizm.jp/006/excelvba_find.shtml
お礼
アドバイスいただいたように、引数LookAtで完全一致”xlWhole”をしていしたら解決しました。 ありがとうございました。
お礼
アドバイスいただいたとおりの指定方法を使ったら、解決しました。 ありがとうございました。