Проверьте, содержит ли строка другую строку


233

Я хочу найти, если строка содержит "," (запятая) в нем. Есть ли у нас какой-либо другой вариант, кроме чтения за символом?


14
У INSTRтебя работает?
Стивен Куан

Ответы:


386

Используйте функцию Instr

Dim pos As Integer

pos = InStr("find the comma, in the string", ",")

вернется 15 в поз

Если не найден, он вернет 0

Если вам нужно найти запятую с формулой Excel, вы можете использовать =FIND(",";A1)функцию.

Обратите внимание, что если вы хотите использовать, Instrчтобы найти позицию строки без учета регистра, используйте третий параметр Instr и vbTextCompareприсвойте ему значение const (или просто 1 для несгибаемых символов).

Dim posOf_A As Integer

posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)

даст вам значение 14.

Обратите внимание, что вы должны указать начальную позицию в этом случае, как указано в спецификации, с которой я связан: Аргумент start необходим, если указано сравнение.


4
Но что, если найденная строка находится в позиции 0? Как вы различаете «найдено по индексу 0» и «не найдено (0)»?
gEdringer

10
@gEdringer. Когда искомая строка находится в начале, она возвращает 1.
Рен


23

Также есть InStrRev функция которая делает то же самое, но начинает поиск с конца текста до начала.

Ответ Пер @ Рене ...

Dim pos As Integer
pos = InStrRev("find the comma, in the string", ",")

... все равно вернет 15 в pos, но если строка содержит более одной строки поиска, например слово "the", то:

Dim pos As Integer
pos = InStrRev("find the comma, in the string", "the")

... вернул бы 20 в поз, а не 6.


17

Основываясь на ответе Рене, вы также можете написать функцию, которая возвращает либо TRUE, если подстрока, либо FALSE, если ее нет:

Public Function Contains(strBaseString As String, strSearchTerm As String) As Boolean
'Purpose: Returns TRUE if one string exists within another
On Error GoTo ErrorMessage
    Contains = InStr(strBaseString, strSearchTerm)
Exit Function
ErrorMessage:
MsgBox "The database has generated an error. Please contact the database administrator, quoting the following error message: '" & Err.Description & "'", vbCritical, "Database Error"
End
End Function

3
Какую ошибку базы данных мы ожидаем в этой функции? Перехват ошибок и сообщение об ошибке кажутся совершенно бессмысленными.
Руби Нуби

11
@RoobieNuby Это просто обработка ошибок по умолчанию. Я включил это во все свои функции, потому что, если что-то пойдет не так, я хочу, чтобы персонал позвонил мне, а не пытался исправить это самостоятельно.
Зловещая Борода
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.