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:
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á:
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:
Teremos como resultado da execução do código o que é mostrado abaixo:
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:
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!
Para acessar outras publicações de VBA, clique aqui!
Quer aprender mais sobre VBA com um Minicurso Gratuito?
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.