Я хочу найти, содержит ли строка "," (запятая). Есть ли у нас какой-либо другой вариант, кроме чтения посимвольно?
Проверить, содержит ли строка другую строку
Ответы (5)
Используйте функцию Instr.
Dim pos As Integer
pos = InStr("find the comma, in the string", ",")
вернет 15 в pos
Если не найдено, возвращается 0
Если вам нужно найти запятую в формуле Excel, вы можете использовать функцию =FIND(",";A1)
.
Обратите внимание, что если вы хотите использовать Instr
для поиска позиции строки без учета регистра, используйте третий параметр Instr и присвойте ему константу vbTextCompare
(или просто 1 для упорных).
Dim posOf_A As Integer
posOf_A = InStr(1, "find the comma, in the string", "A", vbTextCompare)
даст вам значение 14.
Обратите внимание, что в этом случае вы должны указать начальную позицию, как указано в спецификации, на которую я ссылаюсь: Аргумент start требуется, если указано сравнение.
Вы также можете использовать специальное слово like
:
Public Sub Search()
If "My Big String with, in the middle" Like "*,*" Then
Debug.Print ("Found ','")
End If
End Sub
Существует также функция 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 на позицию вместо 6.
Основываясь на ответе Рене, вы также можете написать функцию, которая возвращает 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
Вы бы не хотели делать это, учитывая существующие функции Instr/InstrRev, но бывают случаи, когда удобно использовать EVALUATE для возврата результата функций рабочего листа Excel в VBA.
Option Explicit
Public Sub test()
Debug.Print ContainsSubString("bc", "abc,d")
End Sub
Public Function ContainsSubString(ByVal substring As String, ByVal testString As String) As Boolean
'substring = string to test for; testString = string to search
ContainsSubString = Evaluate("=ISNUMBER(FIND(" & Chr$(34) & substring & Chr$(34) & ", " & Chr$(34) & testString & Chr$(34) & "))")
End Function
INSTR
вам подходит? - person Stephen Quan   schedule 23.03.2013