|
▼ichinose さん:
>FindメソッドとFindnextメソッドを使い、先に検索だけを行い、
>見つかったセルをUnionメソッドを使って、
>セル範囲の集合体にしておきます。
>
>その後で、見つかったそのセル範囲を順次選択し、表示させてみては?
これはグッドですね!さすがです。
その方向で書いてみました。ただし、今までアップ済みのコードをなるべく流用しましたので
ちょっと、スッキリしないものになってますが、結果はでたようです。
Sub Test7()
Call 検索("山本", "鈴木")
End Sub
Sub Test8()
Call 検索("山本", "")
End Sub
Sub Test9()
Call 検索("", "山本")
End Sub
Private Sub 検索(ByVal str1 As String, ByVal str2 As String)
Dim c As Range
Dim v(1 To 2)
Dim myStr As Variant
Dim ansR As Range
Dim f As Range
If Len(str1) > 0 Then str1 = "*" & str1 & "*"
If Len(str2) > 0 Then str2 = "*" & str2 & "*"
v(1) = str1
v(2) = str2
For Each myStr In v
If Len(myStr) > 0 Then
Set c = ActiveSheet.UsedRange.Find(What:=myStr, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not c Is Nothing Then
Set f = c
Do
If ansR Is Nothing Then
Set ansR = c
Else
Set ansR = Union(ansR, c)
End If
Set c = ActiveSheet.UsedRange.FindNext(c)
Loop While c.Address <> f.Address
End If
End If
Next
MsgBox ansR.Address
If ansR Is Nothing Then
MsgBox "検索対象のものはありません"
Else
For Each c In ansR.Cells
c.Activate
If MsgBox("検索を続けますか?", vbYesNo) = vbNo Then Exit For
Next
End If
Set ansR = Nothing
Set c = Nothing
Set f = Nothing
End Sub
|
|