.Execute
Как правило, нужно не только выяснить, встречаются ли в строке подстрока удовлетворяющая регулярному выражению, а необходимо получить коллекцию соответствий.
'Ищем все совпадения по регулярному выражению
'Возвращаемое значение - коллекция объектов
Public Function RegExpFind(str As String, _
Pattern As String, _
Optional Globa1 As Boolean = True, _
Optional IgnoreCase As Boolean = False, _
Optional Multiline As Boolean = False) _
As Object Set RegExpFind = Nothing
'Пока не нашли ничего
If Not str Like "" And Not Pattern Like "" Then
Dim RegExp As Object
'Для регулярного выражения
Set RegExp = CreateObject("VBScript.RegExp")
With RegExp
'Нужны все совпадения или только первое?
.Global = Globa1
'Регистр неважен?
.IgnoreCase = IgnoreCase
'Игнорировать переносы строк?
.Multiline = Multiline
'Регулярка
.Pattern = Pattern
End With
On Error Resume Next
'Коллекция совпадений
Set RegExpFind = RegExp.Execute(str)
'Очистка памяти
Set RegExp = Nothing
End If
End Function
Пример использование в проекте VBA:
Dim objMatches As Object 'Коллекция совпадений
Dim objMatch As Object 'Отдельное совпадение
Dim strOriginal As String 'Оригинальная строка
Dim strPattern As String 'Регулярное выражение
Dim ro As Long 'Записывать результаты будем построчно
ro = 1 'Начнём с первой строки
strOriginal = "Извлекаем из предложения отдельные слова."
strPattern = "[А-ЯЁёа-я-]+" 'Русские буквы и дефис
'Получаем все совпадения
Set objMatches = RegExpFind(strOriginal, _
strPattern, True, True)
'Если функция применилась без ошибок
If Not objMatches Is Nothing Then
'Если совпадения есть
If objMatches.Count > 0 Then
'Перебираем совпадения по одному
For Each objMatch In objMatches
'Записываем сведения о подстроке
With objMatch
Cells(ro, 1) = ro 'Порядковый номер
'Номер позиции в оригинальной строке
Cells(ro, 2) = .FirstIndex
Cells(ro, 3) = .Length 'Длина подстроки
Cells(ro, 4) = .Value 'Подстрока
End With
ro = ro + 1 'Переход на следующую строку
Next
End If
End If
'Очистка памяти
Set objMatch = Nothing
Set objMatches = Nothing
'1 0 9 Извлекаем
'2 10 2 из
'3 13 11 предложения
'4 25 9 отдельные
'5 35 5 слова
Кстати, пока Вы не подключите в редакторе VBE модуль для работы с регулярными выражениями, пользоваться этой функцией не сможете.
Ну, а если нужно не просто найти все совпадения, а и заменить их на другую строку, то для этого можно воспользоваться функцией поиска и замены по регулярному выражению.
Для тестирования в VBA регулярных выражений можно воспользоваться excel-приложением RegExp_Tester.