Как определить позицию появления одной строки внутри другой, с учётом символов подстановки (не используя цикл)?

Для того, чтобы определить позицию появления одной строки внутри другой можно применить Basic функцию InStr, однако, если при поиске необходимо использовать символы подстановки ? и *, то в таком случае Вы можете воспользоваться стандартной функцией рабочего листа ПОИСК/Search

code: #vba
iText$ = "Текст, в котором нам необходимо найти барона Врангеля [1878-1928]"
 
iResult = Application.Search("Вр?нгел", iText$)
 
If Not IsError(iResult) Then
   MsgBox "Текст начинается с позиции# " & iResult, , ""
Else
   MsgBox "Искомый текст не найден", , ""
End If
code: #vba
iText$ = "Текст, в котором нам необходимо найти капитана Врунгеля"
 
iResult = Application.Search("Вр?нгел", iText$)
 
If IsNumeric(iResult) = True Then
   MsgBox "Текст начинается с позиции# " & iResult, , ""
Else
   MsgBox "Искомый текст не найден", , ""
End If
code: #vba
iText$ = "Текст, где вроде бы есть барон Мюнхгаузен"
 
If iText$ Like "*Мюнх*аузен*" Then
   MsgBox "Текст начинается с позиции# " & _
   WorksheetFunction.Search("Мюнх*аузен", iText$), , ""
Else
   MsgBox "Искомый текст не найден", , ""
End If

Примечание:

  • Максимально допустимое количество символов в строке не должно превышать 32767
  • По умолчанию поиск начинается с первого символа, однако, это легко исправить, если использовать третий(необязательный) аргумент функции, например, Application.Search("Текст", "Внутр_текста", 5)
  • Если нет необходимости в определении позиции вхождения, то для определения наличия искомой строки, достаточно всего лишь использовать оператор Like
Поделиться:

Похожие статьи: