Blog

Postado em em 12 de março de 2022

Função Regex no VBA – Regular Expressions

Na aula de hoje eu quero te mostrar como utilizar a função Regex no VBA, ou seja, como usar as regular expressions!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala, Impressionadores! Hoje nós vamos falar sobre a função regex no VBA, que são as regular expressions no VBA (expressões regulares).

Essas expressões regulares são utilizadas em diversas linguagens de programação, mas hoje nós vamos utilizá-las dentro do VBA para buscar informações em um texto.

Você provavelmente já precisou buscar um CPF ou um RG dentro de um texto e não sabia como fazer, não é? Hoje eu vou te mostrar como pegar o padrão de CPF no VBA e o padrão de RG no VBA com as regular expressions.

Primeiro eu vou te mostrar como habilitar o regex no VBA antes de criarmos a macro no VBA para identificar tanto o padrão de CPF quanto o padrão de RG.

Depois disso vamos poder utilizar essa macro para obter as informações de CPF e RG de vários textos de forma rápida e automática.

Então você não vai precisar fazer isso de forma manual e perder muito tempo nisso, principalmente se tiver muitas informações a serem retiradas.

Claro que você vai poder adaptar o regex para sua necessidade, então se precisar encontrar um outro padrão específico vai poder inserir esse padrão no seu código!

Início

Temos informações para serem analisadas que descrevem pessoas. Suponha que numa coluna tenhamos várias linhas de informações em um banco de dados, por exemplo.

Dessas informações dispostas, precisaremos extrair de forma rápida o CPF e o RG descritos no meio do texto.

Veja os exemplos utilizados na aula de hoje:

Encontrar padrões em texto com VBA
Encontrar padrões em texto com VBA

Código para habilitar o uso da função Regex

Devemos utilizar um código específico para utilizar/invocar a função regex. Para tal, precisaremos ativar uma referência específica no VBA.

Então, você precisará:

  • Abrir o VBA (Alt(+Fn)+F11)
  • Ir na guia Ferramentas
  • Referências…
  • Marcar a caixinha correspondente ao “Microsoft VBScript Regular Expressions 5.5” (como na foto abaixo)
  • OK
Função Regex no VBA

Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.

Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte.

Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.

Mudaremos a sua propriedade name para “FunctionRegex” e colocaremos a seguinte sub dentro dele:

'Fonte: 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

Esse módulo (que contém uma function) vai armazenar de fato a função regex que vamos utilizar na aula, abordada a seguir.

Vamos apenas citar/chamar essa função já pronta, e seus argumentos. Por questão de organização, vamos novamente na guia Inserir > Módulo, e uma caixa branca se abrirá.

Mudaremos a sua propriedade name para “modAulaRegex” e colocaremos a seguinte sub dentro dele, que será o objeto de estudo da aula de hoje.

Código com a utilização da função Regex

Sub extrairCPFRG()


For linha = 2 To 5
   Cells(linha, 2).Value = regex(Cells(linha, 1).Value, "[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}")
   Cells(linha, 3).Value = regex(Cells(linha, 1).Value, "[0-9]{2}.[0-9]{3}.[0-9]{3}-[0-9]{1}")
Next

End Sub

Explicação e comentários:

  • Usar de uma estrutura de repetição For que vai realizar ações indo da linha 2 até a linha 5, onde vai:
    • Armazenar na célula da linha em questão e na 2ª coluna (coluna B) o valor resultante da função Regex que vai trazer da célula na mesma linha em questão e na 1ª coluna (coluna A) os 3 números em sequência, seguidos de um ponto final (.), seguidos de 3 números em sequência, seguidos de um ponto final (.), seguidos de 3 números em sequência seguidos de um hífen (-), seguidos de 2 números em sequência. Esse valor representará o CPF
    • Armazenar na célula da linha em questão e na 3ª coluna (coluna C) o valor resultante da função Regex que vai trazer da célula na mesma linha em questão e na 1ª coluna (coluna A) os 2 números em sequência, seguidos de um ponto final (.), seguidos de 3 números em sequência, seguidos de um ponto final (.), seguidos de 3 números em sequência seguidos de um hífen (-), seguidos de 1 número. Esse valor representará o RG
  • Assim que todas as linhas forem analisadas, de 2 a 5, se encerra o código, e os valores de CPF e RG são retornados nas respectivas colunas.

Teremos como resultado da execução do código o que é mostrado abaixo:

Função Regex no VBA
Padrões em um texto

OBS: Colocamos como comentário no código algumas observações importantes a respeito da função citada, para orientação e melhor entendimento. Veja abaixo:

  • . representa qualquer caracter
  • * representa qualquer quantidade
  • [0-9] representa qualquer número
  • w representa qualquer caractere alfabético
  • [a-z] representa qualquer letra minúscula do alfabeto
  • [A-Z] representa qualquer letra maiúscula do alfabeto
  • d representa qualquer dígito decimal entre 0 e 9
  • r representa a quebra de linha
  • {n} repete uma determinada quantidade de vezes
  • ^ representa o operador “não” (por exemplo: [^0-9]), sendo um caractere não numérico

Conclusão da Função Regex no VBA

Nessa aula você lidou com:

Até mais, Impressionadores! Fique ligado no nosso canal do Youtube para mais conteúdo de Excel, VBA, além de Power BI e PowerPoint!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um Minicurso Gratuito?


Quer sair do zero no Power BI e virar uma referência na sua empresa? Inscreva-se agora mesmo no Power BI Impressionador