2017-04-19 151 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