VBA – Expressões Regulares (Regex)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on February 21, 2023

Este tutorial irá demonstrar como utilizar Regex (expressões regulares) em VBA.

O que é Regex?

Regex é uma abreviação em inglês para Regular Expression (Expressão Regular). Uma expressão regular nada mais é do que um padrão construído a partir de uma sequência de caracteres que são utilizados para encontrar um padrão em uma string de caracteres. Para utilizar Regex no VBA você precisa utilizar o objeto RegExp.

Um padrão, como por exemplo, [A-C] pode ser utilizado para procurar uma combinação de letras maiúsculas entre A e C dentro de uma sequencia. Padrões Regex possuem sua própria sintaxe e podem ser construídos usando um caractere ou uma sequencia de caracteres.

Caracteres Correspondentes

A tabela a seguir mostra a sintaxe que lhe permitirá construir padrões Regex.

Sintaxe do Padrão Descrição Exemplo Padrões Encontrados
. Coincide o ponto com qualquer caractere único, exceto vbNewLine (caractere de nova linha) f.n fan, fon, f@n, fwn
[caracteres] Coincide qualquer caractere único dentro dos colchetes [] [fn] Coincidiria apenas “f” ou “n” na sequencia “fan”
[^caracteres] Coincide qualquer caractere único que não está entre os colchetes [] [^fn] Coincidiria apenas “j” em “fjn”
[inicio-fim] Coincide qualquer caractere que seja parte do intervalo entre colchetes[] [1-5] Coincidiria “4” e “5” em “45”
\w Coincide caracteres alfanuméricos e o caractere underline (_), mas não o caractere de espaço \w Coincidiria “c” em “,c.”
\W Coincide qualquer caractere não-alfanumérico e o caractere underline \W Coincidiria “@” em “bb@bb”
\s Coincide qualquer caractere de espaço em branco, como o espaço simples e o caracteres de tab (tabulação) \s Coincidiria ” ” em “Isto é”
\S Coincide qualquer caracteres que não sejam espaço em branco. \S Coincidiria “T” e “h” em “T h”
\d Coincide qualquer caractere simples de dígito decimal \d Coincidiria “7” em “a7h”
\D Coincide qualquer caractere simples que não seja dígito decimal \D Coincidiria j em “47j”
\ Escape para caracteres especiais, o que lhe permite procurar por eles \. Coincidiria “.” em “59.pQ”
\t Coincide o caracteres de tabulação (vbTab) \t Coincidiria o caractere de tabulação (vbTab)
\r Coincide o caractere de Retorno de Carro (vbCr) \r Coincidiria o caractere de retorno de carro (vbCr)
\n Coincide o caractere de Nova Linha (vbNewLine) \n Coincidiria o caractere de Nova Linha

Quantificadores

Você pode utilizar quantificadores para especificar quantas vezes você deseja que o padrão coincida na string.

Quantificador Descrição Exemplo Padrões Encontrados
* Encontra zero ou mais ocorrências fn*a  fna, fa, fnna, fnnna, fnfnnna
+ Encontra uma ou mais ocorrências fn+a fna, fnna, fnfnna
? Encontra zero ou uma ocorrência fn?a fa, fna
{n} Encontra “n” vezes d\W{4} Coincidiria “d….” em “d….&5hi”
{n,} Encontra pelo menos “n” vezes ou mais d\W{4,} Coincidiria “d….&” em “d….&5hi”
{n,m} Encontra pelo menos “n” vezes e no máximo “m” vezes d\W{1,8} Coincidiria “d….&&&&” em “d….&&&&5hi”

Agrupamento

Agrupamento ou captura lhe permite utilizar um padrão para capturar e extrair uma porção de uma string. Então, não somente o padrão é encontrado, mas também parte da string que coincide com o padrão é capturada.

Padrão Descrição Exemplo Padrão Encontrado e Capturado
(expressão) Agrupa e captura o padrão entre parêntesis (\W{4}) Agrupa e captura “@@@@” de “1@@@@1jlmba”

Como Utilizar Regex no VBA

Para utilizar Regex no VBA, primeiro é necessário definir a referência no VBE (Visual Basic Editor). No editor VBE, vá em Ferramentas > Referências > Microsoft VBScript Regular Expressions.

vba vbe editor

 

 

 

 

 

 

 

 

 

 

 

 

Estas são as propriedades do objeto RegExp:

  • Pattern – O padrão que você irá utilizar para coincidir em uma string.
  • IgnoreCase – Se True (verdadeiro), então o padrão não fará diferenciação entre maiúsculas e minúsculas.
  • Global – Se True, então todas as ocorrências do padrão serão encontradas. Se False então somente a primeira ocorrência é encontrada.
  • MultiLine – Se True, o padrão será encontrado mesmo que esteja em linhas diferentes.

Estes são os métodos do objeto RegExp:

  • Test – Procura por um padrão em uma string e retorna True se uma ocorrência é encontrada.
  • Replace – Substitui as ocorrências do padrão pela string de substituição.
  • Execute – Retorna as ocorrências do padrão contra a string.

Testando um Padrão para Encontrar Ocorrências em uma String

Você pode utilizar o método Test para checar se um padrão encontra ocorrências em uma string. O resultado retornado é True se a uma ocorrência for encontrada. O código a seguir irá mostrar como testar um padrão contra uma string:

Sub RegexTestandoPadrao()

Dim stringExemplo As String
Dim regexUm As Object
Set regexUm = New RegExp

regexUm.Pattern = "f....a"

stringExemplo = "000111fjo88a8"

Debug.Print regexUm.Test(stringExemplo )

End Sub

O resultado é:

vba janela imediata

Substituindo a na String a Ocorrência de um Padrão

Você pode utilizar o método Replace (substituir) para efetuar a substituição da primeira ocorrência de um padrão em uma string, ou substituir todas as ocorrências de um padrão em uma string. Se a propriedade Global está definida como False, então somente a primeira ocorrência será substituída. O código a seguir irá mostrar como substituir uma ocorrência de um determinado padrão em uma dada string:

Sub RegexSubstituirOcorrencia()
Dim stringExemplo As String
Dim regexUm As Object
Set regexUm = New RegExp

regexUm.Pattern = "Este é o número"
regexUm.Global = False
stringExemplo  = "Este é o número 718901"

Debug.Print regexUm.Replace(stringExemplo , "Esse é o novo número")
End Sub

O resultado é:

vba janela imediata regex

 

 

 

 

 

 

 

Para substituir apenas a porção numérica da string usado acima, você deve utilizar o seguinte código:

Sub RegexSubstituirOcorrencia()
Dim stringExemplo As String
Dim regexUm As Object
Set regexUm = New RegExp

regexUm.Pattern = "[^\D]+"
regexUm.Global = False
stringExemplo = "This is the number 105999"

Debug.Print regexUm.Replace(stringExemplo, "777192")
End Sub

O resultado é:

vba janela imediata regex

 

 

 

 

 

 

 

Para substituir todas as ocorrências de um certo padrão em uma string, você deve definir a propriedade Global como True. O código a seguir mostra como você pode substituir todas as ocorrencias de de -A1289C- em uma string:

Sub RegexSubstituirTodasAsOcorrencias()
Dim stringExemplo As String
Dim regexUm As Object
Set regexUm = New RegExp

regexUm.Pattern = "\W\A\d+C\W"
regexUm.Global = True
stringExemplo = "ABC-A1289C-ABC-A1289C-ABC"

Debug.Print regexUm.Replace(stringExemplo , "IJK")
End Sub

vba janela imediata regex

 

 

 

 

 

 

 

Encontrando e Exibindo Uma Ocorrência em uma String

Você pode utilizar o método Executar para encontrar uma ou todas as ocorrências de um padrão dentro de uma string. O código a seguir mostra como encontrar e exibir todas as ocorrências de um padrão em uma string:

 

Sub RegexEncontrarEExibirAOcorrencia()
Dim stringExemplo As String
Dim regexUm As Object
Dim ListaDeOcorrencias As Object
Dim Ocorrencia As Object

Set regexUm = New RegExp

regexUm.Pattern = "A.C"
regexUm.Global = True
regexUm.IgnoreCase = True
stringExemplo = "ABC-A1289C-ADC-A1289C-AJC"

Set ListaDeOcorrencias = regexUm.Execute(stringExemplo)

For Each Ocorrencia In ListaDeOcorrencias
Debug.Print Ocorrencia.Value
Next

End Sub

O resultado é:
vba janela imediata regex

 

 

 

 

 

 

 

Suponha que quiséssemos encontrar apenas a porção -ADC- da string acima. O código a seguir mostra como encontrar e exibir somente -ADC- da string:

Sub RegexEncontrarEExibirAOcorrencia()
Dim stringExemplo As String
Dim regexUm As Object
Dim ListaDeOcorrencias As Object
Dim Ocorrencia As Object
Set regexUm = New RegExp

regexUm.Pattern = "\-\A.C\-"
regexUm.Global = False
regexUm.IgnoreCase = True
stringExemplo = "ABC-A1289C-ADC-A1289C-AEC"

Set ListaDeOcorrencias = regexUm.Execute(stringExemplo)

For Each Ocorrencia In ListaDeOcorrencias 
  Debug.Print Ocorrencia.Value
Next

End Sub

vba janela imediata regex

 

 

 

 

 

 

 

Pode levar algum tempo para aprender a utilizar Expressões Regulares, no entanto, são uma ferramenta extremamente poderosa para identificar/manipular strings de texto. Além disso, são largamente utilizadas entre as linguagens de programação.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA