Excel VBA質問箱 IV

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

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


7755 / 13645 ツリー ←次へ | 前へ→

【37030】検索処理 初心者です。 06/4/20(木) 0:52 質問[未読]
【37037】Re:検索処理 neptune 06/4/20(木) 7:55 回答[未読]
【37047】Re:検索処理 ハチ 06/4/20(木) 10:20 発言[未読]
【37049】Re:検索処理 neptune 06/4/20(木) 10:49 発言[未読]
【37054】Re:検索処理 ハチ 06/4/20(木) 11:39 発言[未読]
【37048】Re:検索処理 Statis 06/4/20(木) 10:44 回答[未読]
【37053】Re:検索処理 Jaka 06/4/20(木) 11:35 発言[未読]
【37085】みなさんありがとうございます! 初心者です。 06/4/20(木) 23:15 お礼[未読]

【37030】検索処理
質問  初心者です。  - 06/4/20(木) 0:52 -

引用なし
パスワード
   テキストボックス(adr)に入力した単語の一部をワークシート(一覧)から検索して該当するセルを全て順番に一つずつSELECTしていくというマクロを組んだつもりが最初の一つをSELECTするだけで終わってしまいます。

Private Sub ken_Click()
Dim adrs As Variant
Dim addr As Variant
Dim theadd As Variant
adrs = adr.Value
Worksheets("一覧").Select
With Worksheets("一覧").Range("a1:c35000")
Set addr = .Find(adrs)
If Not addr Is Nothing Then
theadd = addr.address
Do
addr.Select
MsgBox "見つかりました"
Set addr = .FindNext(addr)
Loop While addr.Value = adrs And addr.address <> theadd
Else
MsgBox "該当なし"
End If
End With
End Sub

なぜでしょうか?よろしくご指導をお願いいたします。

【37037】Re:検索処理
回答  neptune  - 06/4/20(木) 7:55 -

引用なし
パスワード
   ▼初心者です。 さん:
>なぜでしょうか?
の答えはFindメソッドのHelpの解説部分に詳しく書いていますから
そこを見るのが良いでしょう。

Findを継続して行う目的で、FindNextというメソッドがあります。
使用例もありますから、研究してみてください。
殆ど同じような処理をしている様です。

【37047】Re:検索処理
発言  ハチ  - 06/4/20(木) 10:20 -

引用なし
パスワード
   ▼初心者です。 さん:
>テキストボックス(adr)に入力した単語の一部をワークシート(一覧)から検索して該当するセルを全て順番に一つずつSELECTしていくというマクロを組んだつもりが最初の一つをSELECTするだけで終わってしまいます。
>
>Private Sub ken_Click()
>Dim adrs As Variant
>Dim addr As Variant
>Dim theadd As Variant
>adrs = adr.Value
>Worksheets("一覧").Select
>With Worksheets("一覧").Range("a1:c35000")
>Set addr = .Find(adrs)
>If Not addr Is Nothing Then
>theadd = addr.address
>Do
>addr.Select
>MsgBox "見つかりました"
>Set addr = .FindNext(addr)
>Loop While addr.Value = adrs And addr.address <> theadd
>Else
>MsgBox "該当なし"
>End If
>End With
>End Sub
>
>なぜでしょうか?よろしくご指導をお願いいたします。

動作なんですが、"見つかりました"は複数回出るけど、
最後にすべてが選択された状態にならない。
ってことでしょうか?

それなら・・
>addr.Select

addr.Select(False)
にしないとダメだと思います。
グルっと一周して最初の1個だけが選択された状態になっているのでは?

動作検証したワケではないので間違ってたらごめんなさい。

【37048】Re:検索処理
回答  Statis  - 06/4/20(木) 10:44 -

引用なし
パスワード
   こんにちは

これで如何かな?

Private Sub ken_Click()
Dim adrs As String, addr As Range
Dim theadd As String, R As Range

adrs = adr.Value
Application.ScreenUpdating = False
With Worksheets("一覧")
   Set addr = .Range("a1:c35000").Find(adrs, , xlValues, xlPart)
   If Not addr Is Nothing Then
    theadd = addr.Address
    Set R = addr
    Do
     Set addr = .Range("a1:c35000").FindNext(addr)
     Set R = Union(R, addr)
    Loop Until theadd = addr.Address
    MsgBox "見つかりました。"
    .Activate
    R.Activate
   Else
    MsgBox "該当なし"
   End If
End With
Application.ScreenUpdating = True
Set R = Nothing: Set addr = Nothing

End Sub

【37049】Re:検索処理
発言  neptune  - 06/4/20(木) 10:49 -

引用なし
パスワード
   お〜!
思い切り勘違いm(__)m

私以降の回答者の方々のアドバイスを参考にして下さい。

ごめんなさい。

【37053】Re:検索処理
発言  Jaka  - 06/4/20(木) 11:35 -

引用なし
パスワード
   >Private Sub ken_Click()
>Dim adrs As Variant
>Dim addr As Variant
>Dim theadd As Variant
     ↓このadrってなんですか?合っているとして。
>adrs = adr.Value
>Worksheets("一覧").Select
>With Worksheets("一覧").Range("a1:c35000")
          Findメソッドの引数を省略すると前回使用時の設定が起用されるから
        ↓極端に省略するのは控えた方がいいです。
>Set addr = .Find(adrs)
>If Not addr Is Nothing Then
>theadd = addr.address
>Do
  ひらがな検索時の漢字の読み対策なら、ここに書くべき。
  if addr.Value = adrs Then
    >addr.Select
    >MsgBox "見つかりました"
  end if

>Set addr = .FindNext(addr)
         ↓見つかったセルの内容を変えているわけではないので不要。
          上のIf文で判定してするから、全く不要になる。
>Loop While addr.Value = adrs And addr.address <> theadd
 Loop While addr.address <> theadd
>Else
>MsgBox "該当なし"
>End If
>End With
>End Sub

>なぜでしょう?
findメソッドが前回の設定受け継ぐから、現在の状態がどんな状態なのか
解らないけど、
例えば
"しゅ"で検索すると

種類
しゅっきん


しゅ


など含むも、検索してしまいます。
結果、↓これで跳ねられるといった事にもなります。
addr.Value = adrs

多分、こんな事じゃないかと思います。

【37054】Re:検索処理
発言  ハチ  - 06/4/20(木) 11:39 -

引用なし
パスワード
   ▼neptune さん:
>お〜!
>思い切り勘違いm(__)m
>
>私以降の回答者の方々のアドバイスを参考にして下さい。
>
>ごめんなさい。

neptuneさん
心配になって動作検証したら1回しか動きませんでした・・
私のツッコミが見当違いでした。
neptuneさんの指摘が正しいです。
しかもRangeオブジェクトのSelectメソッドは(False)使えませんでした。
たびたび、すいません。

【37085】みなさんありがとうございます!
お礼  初心者です。  - 06/4/20(木) 23:15 -

引用なし
パスワード
   みなさまの迅速なアドバイス、本当にありがとうございます。今、仕事から帰ったばっかりなのでこれからアドバイスを参考しながら頑張ってみようと思います。まずは取り急ぎ、お礼を申し上げます。

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