| 
    
     |  | こんにちは。かみちゃん です。 
 >部分的なキーワードで検索したいので、商品がいくつかHitした時に順番に見ていって、目的の商品が出た時にボタンで処理を分岐させたいのです。(次を検索するか/検索を終了するか)。
 >目的の商品がメッセージで出た時にボタンを押すと検索を終了してF列をアクティブにしたいと考えているのですが、その後も余計に検索してしまいますのでどうしたらよいのか、と。
 
 もしかして、以下のようなコードにしたらいかがでしょうか?
 
 Sub Sample2()
 Dim mystr As String
 Dim myrange As Range
 Dim myadrs As String
 Dim myans As Integer
 
 mystr = Application.InputBox("品名入力")
 If mystr = "false" Then
 Exit Sub
 End If
 
 With Range("A1:A10000")
 Set myrange = .Find(mystr, .Cells(.Rows.Count))
 End With
 
 If myrange Is Nothing Then
 MsgBox "該当なし"
 Else
 myadrs = myrange.Address
 Do
 '   myans = MsgBox("検索します", vbOKCancel + vbInformation)
 '   MsgBox myrange.Offset(0, 0).Value, vbOKCancel
 myans = MsgBox("次のものが検索されました。検索を続けます。" & vbCrLf & " " & myrange.Offset(0, 0).Value, vbOKCancel + vbInformation)
 If myans = vbCancel Then
 myrange.Offset(0, 5).Select
 Exit Sub
 '   Else
 '    myrange.Offset(0, 5).Select
 End If
 Set myrange = Range("A1:A10000").FindNext(myrange)
 Loop Until myrange.Address = myadrs
 MsgBox "最後まで検索しました"
 End If
 End Sub
 
 要するに、
 myans = MsgBox("検索します", vbOKCancel + vbInformation)
 MsgBox myrange.Offset(0, 0).Value, vbOKCancel
 と2回MsgBoxが表示され、1回目の「検索します」で毎回「OK」をクリックして
 いるのではないでしょうか?
 そうすると、
 If myans = vbCancel Then
 ではなくなり、「その後も検索」します。
 
 また、
 MsgBox myrange.Offset(0, 0).Value, vbOKCancel
 で、目的の商品だった場合、「キャンセル」をクリックするのだと思いますが、
 変数myansに代入していないから、
 If myans = vbCancel Then
 が効いていないということです。
 
 上記コードは、その部分を修正した内容にしていますので、ご確認ください。
 
 |  |