Перевірте, чи містить рядок інший рядок


232

Я хочу дізнатися, чи рядок містить в собі "," (кома). Чи є у нас інший варіант, окрім читання «чар-чар-чар»?


14
Чи INSTRпрацює на вас?
Стівен Куан

Відповіді:


385

Використовуйте Instr функцію

Dim pos As Integer

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

поверне 15 в поз

Якщо його не знайдено, воно поверне 0

Якщо вам потрібно знайти кому з формулою excel, ви можете скористатися =FIND(",";A1)функцією.

Зауважте, що якщо ви хочете використовувати Instrпозицію строкової нечутливої ​​до регістру, використовуйте третій параметр Instr і надайте йому const vbTextCompare(або просто 1 для die-hards).

Dim posOf_A As Integer

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

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

Зауважте, що ви повинні вказати початкову позицію в цьому випадку, як зазначено в специфікації, з якою я пов’язаний: Якщо вказано порівняння, потрібен аргумент старту.


4
Але що робити, якщо знайдена рядок знаходиться в положенні 0? Як ви відрізняєте "знайдено в індексі 0" і "не знайдено (0)"?
gEdringer

10
@gEdringer. Коли рядок, який потрібно знайти, на початку, він повертається 1.
оновлення


23

Існує також функція InStrRev, яка робить однотипні речі, але починає пошук з кінця тексту до початку.

Відповідь Per @ rene ...

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

... все ще повертається 15 до пози, але якщо рядок містить більше одного рядка пошуку, як, наприклад, слово "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.