Попробуйте это:
Public Function StringContainsAny(string_source As String, _
ByVal caseSensitive As Boolean, _
ParamArray find_values()) As Boolean
Dim i As Integer, found As Boolean
If caseSensitive Then
For i = LBound(find_values) To UBound(find_values)
found = (InStr(1, string_source, _
find_values(i), vbBinaryCompare) <> 0)
If found Then Exit For
Next
Else
For i = LBound(find_values) To UBound(find_values)
found = (InStr(1, LCase$(string_source), _
LCase$(find_values(i)), vbBinaryCompare) <> 0)
If found Then Exit For
Next
End If
StringContainsAny = found
End Function
Использование:
Dim SomeString As String
SomeString = "I am studying at University of Texas at Arlington"
Debug.Print StringContainsAny(SomeString, False, "university of texas") 'True
Debug.Print StringContainsAny(SomeString, True, "university of texas") 'False
Debug.Print StringContainsAny(SomeString, True, "University of Texas") 'True
Но также :
Debug.Print StringContainsAny(SomeString, False, "TEXAS", "SMURF") 'True
А:
Debug.Print StringContainsAny(SomeString, False, "univ", "of", "tex") 'True
Или:
Dim Words As String()
Words = Split("univ of tex", " ")
Debug.Print StringContainsAny(SomeString, False, Words) 'True
Вы можете указать столько значения, сколько вам нужно для find_values()
, а функция выходит на первый матч найден.
Если вы специально хотите вернуть true
, когда все части «Унив Tex» находятся в строке, вы должны настроить код немного, чтобы вернуть true
, когда все передаваемые аргументы найдены в строке. Но тогда, возможно, метод должен быть переименован StringContainsAll
- возможно, что-то вроде этого:
Public Function StringContainsAll(string_source As String, _
ByVal caseSensitive As Boolean, _
ParamArray find_values()) As Boolean
Dim i As Integer, found As Boolean
If caseSensitive Then
For i = LBound(find_values) To UBound(find_values)
found = (InStr(1, string_source, find_values(i), vbBinaryCompare) <> 0)
If Not found Then Exit For
Next
Else
For i = LBound(find_values) To UBound(find_values)
found = (InStr(1, LCase$(string_source), _
LCase$(find_values(i)), vbBinaryCompare) <> 0)
If Not found Then Exit For
Next
End If
StringContainsAll = found
End Function
Обратите внимание, что последний фрагмент не проверен и не заботится, в каком порядке эти слова встречаются в строке.
Да. Теперь у вас есть конкретный вопрос программирования? –
Я использую excel-vba для программирования. Я пытаюсь добиться аналогичной функциональности оператора, как в sql-запросе в excel-vba. Я не знаю, почему это минус 1ед. – Ramesh