我目前有一个包含1列和多行的Excel文件。该列包含名字,姓氏和可能的中间名(例如:John Abe Smith)。我正在写一个有1个文本框和1个按钮的宏。在excel表中我有几个名字:
Column A
--------
John Abe Smith
Cindy Troll Bee
Randy Row
Joe Jumbo
Katie Kool Kat
我想编写一个宏,当我在文本框中输入内容并单击按钮时,它会在此列中查找名称。如果找到了,那就在消息框中说“找到”。
我想在搜索名字时使用通配符“*”,但我不知道如何。我目前有一些像这样的代码,但通配符不起作用:
Private Sub search_Click()
For firstloop = 3 To 10
If Range("G" & firstloop).Text = name.Text & "*" Then
MsgBox "Found!"
Exit Sub
Else
MsgBox "NOT FOUND"
End If
Next
End Sub
例如,假设我在文本框中输入“ Troll ”,然后单击按钮。我希望循环遍历列以查找包含“Troll”的任何内容。示例数据的结果只是Cindy Troll Bee
。
我怎么能这样做?
答案 0 :(得分:6)
您可以使用Like
运算符(区分大小写):
Private Sub search_Click()
For firstloop = 3 To 10
If Range("G" & firstloop).Text Like name.Text & "*" Then
MsgBox "Found!"
Exit Sub
Else
MsgBox "NOT FOUND"
End If
Next
End Sub
不区分大小写的搜索使用:
If UCase(Range("G" & firstloop).Text) Like UCase(name.Text) & "*" Then
此外,如果您想确定单元格是否包含文本(不仅使用文本启动),您还可以使用(区分大小写) :
If InStr(1, Range("G" & firstloop).Text, name.Text) > 0 Then
或(不区分大小写的)
If InStr(1, Range("G" & firstloop).Text, name.Text, vbTextCompare) > 0 Then
<强> UPD:强>
如果该点仅显示msgbox
,那么我建议使用Application.Match
:
Private Sub search_Click()
If Not IsError(Application.Match("abc" & "*", Range("G3:G10"), 0)) Then
MsgBox "Found!"
Else
MsgBox "NOT FOUND"
End If
End Sub
答案 1 :(得分:0)
您还可以避免循环并使用Range.Find方法。如果您希望区分大小写,则可以选择传递。 (默认情况下,它不区分大小写。)
Set rngFound= Range("G" & firstloop).Find(name.Text & "*")
If rngFound Is Nothing Then
MsgBox "Not Found!"
Else
MsgBox "FOUND"
End If