在下面的代碼中,shLook
是一個帶有文本項目列表的表單,我希望通過迭代rowSt
所示的行來搜索工作表shSource
中的字符串。使用通配符搜索
LPosition = InStr(1, shSource.Cells(rowSt, 18), shLook.Cells(i, 1).Value)
這種運作良好,但是如果在shLook
任何文本包含通配符,它不再是能夠找到相應shSource
字符串。
是否有另一種方法來實現這一點,以便我可以將通配符放入文本項列表中?
在下面的代碼中,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