Макросы в Excel VBA Регулярные выражения .Test

.Test

Иногда не нужно получать коллекцию подстрок соответствующих регулярному выражению, а просто требуется найти простой ответ на вопрос - встречаются ли в строке хотя бы одна подстрока, удовлетворяющая шаблону или нет?

'Встречаются ли в строке совпадения 
'для регулярного выражения?
Public Function RegExpTest(str As String, _
       Pattern As String, _
Optional IgnoreCase As Boolean = False, _
Optional Multiline As Boolean = False) _
As Boolean RegExpTest = False

 'Пока ничего не нашли
 If Not str Like "" And Not Pattern Like "" Then

  Dim RegExp As Object 'Регулярка хранится в объекте
  Set RegExp = CreateObject("VBScript.RegExp")
  With RegExp
   .IgnoreCase = IgnoreCase 'Регистр неважен?
   'Игнорировать переносы строк?
   .Multiline = Multiline 
   .Pattern = Pattern 'Регулярное выражение
  End With

  On Error Resume Next.
  'Так встречается или нет?
  RegExpTest = RegExp.Test(str) 
  Set RegExp = Nothing 'Очистка памяти
  
 End If
End Function

Пример использования в проекте VBA:

Dim strTest As String 'Тестируемая строка
Dim strPattern As String 'Регулярное выражение
strTest = "А Роза упала на лапу Азора!"

strPattern = "о.*?a"
'True, "о.*?a" -> "оза", "ора"
MsgBox RegExpTest(strTest, strPattern)

strPattern = "\d"
'False, цифр нет
MsgBox RegExpTest(strTest, strPattern)

Для тестирования в VBA регулярных выражений можно воспользоваться excel-приложением RegExp_Tester. И да, Вы сможете пользоваться этой функцией только в том случае, если подключите в редакторе VBE DLL для работы с регулярными выражениями.