Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


31862 / 76734 ←次へ | 前へ→

【50115】Re:検索の方法
発言  かみちゃん  - 07/7/10(火) 0:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>部分的なキーワードで検索したいので、商品がいくつか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
が効いていないということです。

上記コードは、その部分を修正した内容にしていますので、ご確認ください。

3 hits

【50093】検索の方法 ぽっぷ 07/7/8(日) 20:21 質問
【50094】Re:検索の方法 かみちゃん 07/7/8(日) 20:48 発言
【50110】Re:検索の方法 ぽっぷ 07/7/9(月) 21:36 お礼
【50115】Re:検索の方法 かみちゃん 07/7/10(火) 0:02 発言

31862 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free