How to add multiple values to this macro

J

J.J.

I found the perfect macro for what I want to do, however, I wish to
add more values to search for. For example, below I chose Lisa, but
what if I were to search for john, jack, and joey as well. How do I go
about adding those values to the string?



Sub Tester03()
Dim sStr As String
Dim sh As Worksheet

Set sh = ActiveSheet

sStr = "Lisa "

With sh.Cells
Set c = .Find(sStr, _
After:=Range("B1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)

If Not c Is Nothing Then
FirstAddress = c.Address
Do
c.Interior.ColorIndex = 3
Set c = .FindNext(c)
Loop While Not c Is Nothing And _
c.Address <> FirstAddress
End If
End With

End Sub
 
G

Guest

You could use an Inputbox like this
Sub findNames()
Dim sStr As String
Dim sh As Worksheet

Set sh = ActiveSheet

sStr = InputBox("Find Name", "Name Finder", "<Enter name to find>")

With sh.Cells
Set c = .Find(sStr, _
After:=Range("B1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)

If Not c Is Nothing Then
FirstAddress = c.Address
Do
c.Interior.ColorIndex = 3
Set c = .FindNext(c)
Loop While Not c Is Nothing And _
c.Address <> FirstAddress
End If
End With

End Sub
 
D

Dave Peterson

One way:

Option Explicit
Sub Tester04()
Dim sStr As String
Dim sh As Worksheet
Dim myWords As Variant
Dim iCtr As Long
Dim c As Range
Dim FirstAddress As String

Set sh = ActiveSheet

myWords = Array("lisa ", "john ", "jack ", "joey ")

For iCtr = LBound(myWords) To UBound(myWords)
sStr = myWords(iCtr)
Set c = Nothing
With sh.Cells
Set c = .Find(sStr, _
After:=Range("B1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)

If Not c Is Nothing Then
FirstAddress = c.Address
Do
c.Interior.ColorIndex = 3
Set c = .FindNext(c)
Loop While Not c Is Nothing And _
c.Address <> FirstAddress
End If
End With
Next iCtr
End Sub
 
D

Dave Peterson

Actually, you have a bug in your original code.

Set c = .Find(sStr, _
After:=Range("B1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)

Range("B1") should be qualified.

Set c = .Find(sStr, _
After:=.Range("B1"), _
LookIn:=xlValues, _
LookAt:=xlPart, _
MatchCase:=False)

(Note that extra dot)

If you ever use this code against a sheet that isn't active, you'll be happy
that you made the change.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top