Комфорт и автоматизация

.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.