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

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

Ответ 1

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

Dim pos As Integer

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

вернет 15 в pos

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

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

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

Dim posOf_A As Integer

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

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

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

Ответ 2

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

Public Sub Search()
  If "My Big String with, in the middle" Like "*,*" Then
    Debug.Print ("Found ','")
  End If
End Sub

Ответ 3

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

В ответ на @rene...

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 в pos вместо 6.

Ответ 4

На основе ответа Рене вы также можете написать функцию, которая вернула 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