Função Regex VBA no Excel – Expressões Regulares

Veja como usar a função Regex no Excel à partir do VBA para retornar expressões regulares de células.

Expressões regulares são padrões de strings dentro de outra string.

Por exemplo, digamos que queira extrair somente o e-mail do texto: O meu e-mail é Vendas.Lojas123@acme.com.br, aguardo seu contato.

Para extrair o e-mail de textos como este ou qualquer texto podemos fazer uso de expressões regulares, este tipo de funcionalidade está presente em várias linguagens e podemos usá-la também no VBA.

Como Criar uma função Regex VBA no Excel

O Regex não está entre as funções do Excel, por isso iremos colocar no VBA esta função própria.

Esta função ficará disponível apenas na planilha que você colocar, ou senão pode ser instalada na planilha pessoal, que pode ver conforme no link abaixo também.

Pressione ALT+F11 ou siga o procedimento Habilitar Guia Desenvolvedor.

No Visual Basic Editor clique na guia Ferramentas->Referências

Nas referências marque a biblioteca Microsoft VBScript Regular Expressions 5.5.

Esta é a biblioteca das expressões regulares do VBScript.

Feito isso já podemos colocar a função.

Clique em Inserir->Módulo e no módulo incluso cole o seguinte texto, que é referente a função Regex.

Função criada por Patrick Bökler no link: https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops

Function regex(strInput As String, matchPattern As String, Optional ByVal outputPattern As String = "$0") As Variant
    Dim inputRegexObj As New VBScript_RegExp_55.RegExp, outputRegexObj As New VBScript_RegExp_55.RegExp, outReplaceRegexObj As New VBScript_RegExp_55.RegExp
    Dim inputMatches As Object, replaceMatches As Object, replaceMatch As Object
    Dim replaceNumber As Integer

    With inputRegexObj
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = matchPattern
    End With
    With outputRegexObj
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = "\$(\d+)"
    End With
    With outReplaceRegexObj
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
    End With

    Set inputMatches = inputRegexObj.Execute(strInput)
    If inputMatches.Count = 0 Then
        regex = False
    Else
        Set replaceMatches = outputRegexObj.Execute(outputPattern)
        For Each replaceMatch In replaceMatches
            replaceNumber = replaceMatch.SubMatches(0)
            outReplaceRegexObj.Pattern = "\$" & replaceNumber

            If replaceNumber = 0 Then
                outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).Value)
            Else
                If replaceNumber > inputMatches(0).SubMatches.Count Then
                    regex = CVErr(xlErrValue)
                    Exit Function
                Else
                    outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).SubMatches(replaceNumber - 1))
                End If
            End If
        Next
        regex = outputPattern
    End If
End Function

Com isso nós já temos a função regex pronta para você poder utilizar.

Como Usar a Função Regex no Excel

Veja algumas sintaxes:

ExpressãoExplicação
.Qualquer caracter
*Qualquer quantidade
[0-9]Qualquer número
[0-9]{7}Conjunto de 7 números
[0-9]+Conjunto numérico com qualquer quantidade
[0-9]+:[0-9]+Exemplo de expressão para extrair horário
\wQualquer caractere alfabético
[a-z]Qualquer letra minúscula do alfabeto
[A-Z] Qualquer letra maiúscula do alfabeto
\dQualquer dígito decimal entre 0 e 9
\rRepresenta a quebra de linha
{n}Repete uma determinada quantidade de vezes
Extrair o usuário: O usuário JOAQUIM123465 está ativo[\w]*[0-9]+ :JOAQUIM123465
Extrair o valor: Vendemos no total hoje 1565,99 litros de desinfetante[0-9.,]+ :1565,99
Extrair o e-mail: teste Vendas123456.Teste@gmail.com abcde\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)* : Vendas123456.Teste@gmail.com
Extrair o conjunto numérico: asdfasdf 1234678970 testes teste[0-9]+
Extrair a hora: agora são 09:35 h da tarde[0-9]+:[0-9]+ :09:35
^Operador não, por exemplo [^0-9], um caractere não numérico

Há ainda vários outros operadores para expressões regulares que podem ser encontradas em diversos sites.

Exemplo Prático com Regex no Excel

No exemplo abaixo temos a necessidade de extrair o número do processo.

Ele segue um padrão de números, traço e pontuações e constam em diferentes partes dos textos.

Para extrair estes dados nós utilizamos a seguinte expressão regular REGEX: [0-9]{7}-[0-9]{2}.[0-9]{4}.[0-9]{1}.[0-9]{2}.[0-9]{4}

Nele temos o uso de [0-9]{7}, isso significa 7 caracteres numéricos, após ele temos o caracter “-” e o caracter “.” e outras cadeiras numéricas.

O resultado então é a extração exata dos caracteres, por exemplo: 0000403-07.5050.8.56.0005.

Download d

Download da Planilha de Regex Excel – Expressões Regulares

Realize o download da planilha com o Regex instalado no Excel e vários exemplos neste botão abaixo. Basta se inscrever na nossa newsletter gratuita para o download automático.

Baixe a planilha


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel