2017-04-19 420 views
0

在下面的代码中,shLook是一个带有文本项目列表的表单,我希望通过迭代rowSt所示的行来搜索工作表shSource中的字符串。使用通配符搜索

LPosition = InStr(1, shSource.Cells(rowSt, 18), shLook.Cells(i, 1).Value) 

这种运作良好,但是如果在shLook任何文本包含通配符,它​​不再是能够找到相应shSource字符串。

是否有另一种方法来实现这一点,以便我可以将通配符放入文本项列表中?

+0

将'shLook.Cells(row,col).Value'传递给VBA时,将其视为一个字符串。通配符应该在脚本中使用。 – Masoud

+0

我猜这是在Excel中?请添加缺失标签 – phil652

回答

0

如果你只是想知道字符串是否存在,你可以使用:

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”的情况下,获得虚假的比赛。

+0

哇,这非常有帮助谢谢! 如果通配符位于搜索字符串的中间位置,我如何调整@ YowE3K提供的上述代码。如果我有车牌号的一个长长的清单,我想搜索字符串是: Vehicle_no _ * _ to_sell ,而不是具有详细的搜索字符串为每辆车编号: Vehicle_no_1_to_sell Vehicle_no_2_to_sell Vehicle_no_3_to_sell等 – falconrae

+0

难道你真的在比赛开始的位置之后,还是只是试图找出这些字符串是否“匹配”? ''Vehicle_no_1_to_sell“像”Vehicle_no _ * _ to_sell“'应该返回'True',所以代码的第一部分将工作。找到位置会更困难。 – YowE3K