[[20200515163658]] 『findメソッドの抽出漏れについて』(pd) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『findメソッドの抽出漏れについて』(pd)

蔵書検索ツールのようなものを作りたいと思っています。検索ボタンを設置し、findメソッドおよびfindnextを用いながら、検索したワードをリストアップするといった具合なのですが、例えば「松島」で検索すると本来は5件のヒットしなければいけないところ、2件しかヒットしません。一方で、「松島」でヒットしなかったものについては「松島栄治」などで検索するとヒットします。解決方法が見出せません。ちなみに、findの引数であるlookatはxlPartにしています。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


大抵の方はエスパーではないので、具体的なコードとレイアウトを示して、説明したほうが回答が付きやすいと思います。

(もこな2) 2020/05/15(金) 17:11


ご指摘ありがとうございます。このサイトおよびVBA自体も初心者なものでして・・・。
私がコードしたものは以下のようになります。

Sub 検索()

 Dim myRange As Range
 Dim myObj,myObj2 As Range 
 Dim Tytle As String

If Title <>”” then

   Set myRange = Worksheets(“データベース”).Range(“D1:D19464”)
   Set myObj = myRange.Find(what:=Tytle, lookat:=xlPart)

    If myObj Is Nothing Then
       MsgBox “見つかりません。
    Else
       Set myObj2 = myObj
       Do
          Set myObj2 = myRange.FindNext(after:=myObj2)
          Cells( 18+i  ,2 ).Value = myObj2
           i  = i  + 1
       Loop While myObj2<>myObj
    End if
 End if
End Sub
(Pd) 2020/05/16(土) 09:13

 > Dim Tytle As String
     ↑
      スペルが違ってますが、大丈夫ですか?
        ↓
 > If Title <> "" Then

  そもそもTitleはどこで値を決めているんですか?  
  決めてなかったら処理しないで終了ですよ。

(半平太) 2020/05/16(土) 10:06


ちょっと出かける用事があるので気付きの点だけ
■1
 Loop While myObj2<>myObj
    ↓
 Loop While myObj2.Value <> myObj.Value

と解釈されますが、設計通りですか?
(最初と、次にヒットしたものの)2つしかヒットしたことにならないのはここが原因のように思います。

■2
最初にヒットしたものを出力していないようですが、問題ないのですか?

(もこな2 ) 2020/05/16(土) 10:22


失礼。↑は無しでお願いします。

(もこな2) 2020/05/16(土) 10:53


回答ありがとうございます。
Title はTytleの誤りでした。コード上はTytleになっています。
また、Tytleは
Tytle = Cells(4,5).Value
として、定義しています。

ちなみに、いろんなワードで検索をかけましたが複数の検索値が出ています。
例えば「太田」で検索するとデータベース上の全てのものにヒットしています。(個数は51個)
(pd) 2020/05/16(土) 11:15


 >  Loop While myObj2<>myObj
  
 であれば、そのループ条件。
 完全な同値が途中で出てきたら、そこで終わっちゃいます。

  Loop While myObj2.Address <> myObj.Address

 に換えてみてください。

(半平太) 2020/05/16(土) 11:42


回答ありがとうございます。
ご指摘の通り、.addressにしたところ、うまくいきました!!
めちゃくちゃ感動してます!
協力していただきありがとうございました!!
(pd) 2020/05/16(土) 11:53

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.