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

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 необходим, если указано сравнение.

Rene
источник
4
Но что, если найденная строка находится в позиции 0? Как вы различаете «найдено по индексу 0» и «не найдено (0)»?
gEdringer
10
@gEdringer. Когда искомая строка находится в начале, она возвращает 1.
Рен
69

Вы также можете использовать специальное слово like:

Public Sub Search()
  If "My Big String with, in the middle" Like "*,*" Then
    Debug.Print ("Found ','")
  End If
End Sub
мака
источник
3
Ссылка на формат шаблона msdn.microsoft.com/en-us/library/…
Мэтью Локк
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.

LimaNightHawk
источник
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 Это просто обработка ошибок по умолчанию. Я включил это во все свои функции, потому что, если что-то пойдет не так, я хочу, чтобы персонал позвонил мне, а не пытался исправить это самостоятельно.
Зловещая Борода