使用通配符搜索
在下面的代码中,shLook
是一个带有文本项目列表的表单,我希望通过迭代rowSt
所示的行来搜索工作表shSource
中的字符串。使用通配符搜索
LPosition = InStr(1, shSource.Cells(rowSt, 18), shLook.Cells(i, 1).Value)
这种运作良好,但是如果在shLook
任何文本包含通配符,它不再是能够找到相应shSource
字符串。
是否有另一种方法来实现这一点,以便我可以将通配符放入文本项列表中?
如果你只是想知道字符串是否存在,你可以使用:
Dim found As Boolean
Dim searchString As String
searchString = shLook.Cells(i, 1).Value
If Left(searchString, 1) <> "?" Then searchString = "*" & searchString
If Right(searchString, 1) <> "?" Then searchString = searchString & "*"
found = shSource.Cells(rowSt, 18).Value Like searchString
然后,如果您想知道位置的字符串开始的地方,你需要做之前剥离通配符出在Instr
:
If Found Then
LPosition = InStr(shSource.Cells(rowSt, 18), Replace(Replace(searchString, "?", ""), "*", ""))
End If
注:不能简单地做第二部分而不必做的第一部分,因为你会在搜索“ABC?”内“XYZABCIJK”的情况下,获得虚假的比赛。
哇,这非常有帮助谢谢! 如果通配符位于搜索字符串的中间位置,我如何调整@ YowE3K提供的上述代码。如果我有车牌号的一个长长的清单,我想搜索字符串是: Vehicle_no _ * _ to_sell ,而不是具有详细的搜索字符串为每辆车编号: Vehicle_no_1_to_sell Vehicle_no_2_to_sell Vehicle_no_3_to_sell等 – falconrae
难道你真的在比赛开始的位置之后,还是只是试图找出这些字符串是否“匹配”? ''Vehicle_no_1_to_sell“像”Vehicle_no _ * _ to_sell“'应该返回'True',所以代码的第一部分将工作。找到位置会更困难。 – YowE3K
将'shLook.Cells(row,col).Value'传递给VBA时,将其视为一个字符串。通配符应该在脚本中使用。 – Masoud
我猜这是在Excel中?请添加缺失标签 – phil652