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

.Replace

Иногда мало найти все соответствия регулярному выражению, а ещё нужно совпадения на что-нибудь заменить.

'Поиск по регулярному выражению и замена.
Public Function RegExpFindReplace(str As String, _
       Pattern As String, _
       Replace As String, _
       Optional Globa1 As Boolean = True, _
       Optional IgnoreCase As Boolean = False, _
       Optional Multiline As Boolean = False) _
       As String RegExpFindReplace = str

 'Пока ничего не меняли
 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
  RegExpFindReplace = RegExp.Replace(str, Replace)
  Set RegExp = Nothing 'Очистка памяти

 End If
End Function

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

Dim strOriginal As String 'Оригинальная строка
Dim strResult As String 'Результат после замены
Dim strPattern As String 'Регулярное выражение
Dim strReplace As String 'На что меняем
strOriginal = "Удаление    лишних    пробелов."

'Более двух пробелов подряд...
strPattern = "\s{2,}"
'... меняем на один пробел
strReplace = " "
strResult = RegExpFindReplace(strOriginal, _
            strPattern, strReplace)

'Сообщение: "Удаление лишних пробелов."
MsgBox strResult

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