RegEx VBA

O VBA RegEx “Expressão Regular” é muito útil no mundo da programação, que pode ser usado para validar a entrada do site, pesquisando padrões de palavras em grandes strings / textos, para pesquisa e substituição de strings.

A maioria de nós está usando FIND, SUBSTITUTE, ESQUERDA, DIREITA, juntamente com funções MID para manipulação de strings no Microsoft Excel, não é? No entanto, essas funções têm limitações próprias que não podem ser amplamente utilizadas. Ter conhecimento sobre expressões regulares do VBA economizará muito tempo no seu dia-a-dia. Expressões regulares são formadas rapidamente como "RegEx" (ou Regex) no VBA. Neste tutorial, veremos alguns dos RegEx com sua utilização.

Você pode usar o objeto VBA RegEx que já foi criado na biblioteca Microsoft VBScript Regular Expressions. Você pode navegar nesta biblioteca clicando em Ferramentas - Referência - Expressões regulares do Microsoft VBScript.

Você também pode criar um objeto RegEx usando a função CreateObject no VBA. Parece uma maneira mais conveniente, pois nem sempre é necessário consultar a biblioteca de expressões regulares do VBScript.

Veja o código abaixo:

 Dim regex como conjunto de objetos regex = CreateObject ("VBScript.RegExp") 

Este código permitirá que você crie e acesse objetos RegEx na sua macro. Pessoalmente, prefiro esse caminho ao invés do primeiro devido à sua rigidez.

A função RegEx permite manipular o seguinte em uma cadeia longa.

  • Curingas como *, ? etc.
  • Expressões agrupadas junto com caracteres curinga.

RegEx tem abaixo parâmetros / propriedades:

  1. Padrão - o padrão definido no RegEx no qual você deseja executar operações.
  2. IgnoreCase - ignora as letras maiúsculas (maiúsculas / minúsculas são iguais em uma sequência de caracteres).
  3. Global - Permite encontrar todas as correspondências possíveis, se definido como TRUE. Se definido como FALSE, ele encontrará apenas a primeira correspondência.
  4. MultiLine - Permite combinar o padrão em uma sequência que se espalha por várias linhas.

O RegEx facilita as três operações abaixo:

  • Teste - Testa se o padrão mencionado está presente na cadeia ou não. Se presente retornar VERDADEIRO, senão FALSO.
  • Substituir - Substitui o padrão original pelo outro.
  • Executar - Retorna todos os padrões correspondentes pesquisados.

Como usar o Excel VBA RegEx?

Aprenderemos como usar a Expressão regular do Excel VBA com alguns exemplos.

Você pode fazer o download deste modelo VBA RegEx Excel aqui - Modelo VBA RegEx Excel

RegEx VBA do Excel - Exemplo # 1

Aqui, você verificará se o padrão mencionado está presente no texto usando o RegEx.Test.

Siga as etapas abaixo para usar o VBA RegEx.

Etapa 1: defina um novo subprocedimento para criar uma macro.

Código:

 Sub RegEx_Ex1 () End Sub 

Etapa 2: defina duas variáveis ​​RegEx como um Objeto que podem ser usadas para criar o objeto RegEx e Str como uma sequência.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como string End Sub 

Etapa 3: Crie o objeto RegEx usando a função CreateObject.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") End Sub 

Etapa 4: adicione o padrão a ser testado com a função RegEx.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "(0-9) +" End With End Sub 

Etapa 5: defina a string na qual precisamos verificar o padrão fornecido.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") Com RegEx .Pattern = "(0-9) +" Terminar com Str = "O número da minha bicicleta é MH-12 PP- 6145 "End Sub 

Etapa 6: use RegEx.Test para testar se o padrão fornecido está presente na variável denominada Str. Além disso, use Debug.Print para imprimir o resultado (Verdadeiro ou Falso) na janela imediata.

Código:

 Sub RegEx_Ex1 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") Com RegEx .Pattern = "(0-9) +" Terminar com Str = "O número da minha bicicleta é MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Etapa 7: Pressione F5 ou o botão Executar para executar o código e ver a saída. (Pressione CTRL + G para abrir a janela imediata)

Aqui, criamos um objeto RegEx. Em seguida, com o VBA RegEx, verificamos se o padrão fornecido (“(0-9) +”), que inclui todos os números / combinações de números de 0 a 9, está presente na cadeia definida com a ajuda de RegEx.Test ( Str). A saída “True” na janela imediata mostra que o padrão “(0-9) +” está presente em uma determinada string.

RegEx VBA do Excel - Exemplo # 2

Aqui, você verá como substituir uma sequência por outra usando o RegEx.Replace.

Siga as etapas abaixo para usar o VBA RegEx.

Etapa 1: defina uma nova sub-string para criar uma macro.

Código:

 Sub RegEx_Ex2 () End Sub 

Etapa 2: Igual ao primeiro exemplo, defina duas variáveis ​​RegEx como um Objeto que pode conter o valor do objeto RegEx e Str que manterá o valor da string que você definirá.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como string End Sub 

Etapa 3: defina o objeto RegEx e defina-o como variável RegEx usando a função CreateObject.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") End Sub 

Etapa 4: insira o padrão que deseja substituir usando a função .Pattern.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "123" End With End Sub 

Etapa 5: use .GLOBAL = TRUE, que se TRUE permitir substituir todos os padrões correspondentes em uma determinada string. Se FALSE substitui apenas o primeiro padrão correspondente.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") Com RegEx .Pattern = "123" .Global = True 'If FALSE, substitui apenas a primeira string correspondente' End With End Sub 

Etapa 6: Após finalizar com, defina a sequência com a qual você deseja corresponder e substitua o padrão.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") Com RegEx .Pattern = "123" .Global = True 'If FALSE, substitui apenas a primeira string correspondente' End With Str = End Sub "" 123-654-000-APY-123-XYZ-888 " 

Etapa 6: use RegEx.Replace para substituir o valor do padrão na string fornecida por outro texto.

Código:

 Sub RegEx_Ex2 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") Com RegEx .Pattern = "123" .Global = True 'If FALSE, substitui apenas a primeira string correspondente' End With Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Substitution") End Sub 

Aqui, queríamos que o padrão "123" fosse substituído por outro pedaço de barbante. RegEx.Replace permite substituir o valor do padrão pelo pedaço de string (definimos “Substituído”). Veja também .Global = TRUE. Qual é uma declaração condicional. Se Global = TRUE, a função Substituir substitui todos os padrões correspondentes pela outra sequência. Se GLOBAL = FALSE, a função Replace substituirá apenas o primeiro padrão correspondente e os demais serão negligenciados.

Etapa 7: pressione o botão Executar ou F5 para executar este código e veja a saída na janela Saída imediata.

RegEx VBA do Excel - Exemplo # 3

Aqui, você verá como encontrar todos os padrões correspondentes em uma sequência usando o RegEx.Execute.

Siga as etapas abaixo para usar o Excel VBA RegEx.

Etapa 1: defina um novo subprocedimento para adicionar a macro.

Código:

 Sub RegEx_Ex3 () End Sub 

Etapa 2: siga as etapas da mesma forma que nos dois exemplos anteriores para definir uma expressão regular e uma variável que pode conter o valor da string.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") End Sub 

Etapa 3: insira um padrão que você deseja que seja executado e correspondido na sequência especificada.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "123-XYZ" End With End Sub 

Etapa 4: use .GLOBAL = TRUE para que todas as correspondências sejam capturadas na sequência especificada.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "123-XYZ" .Global = True End With End Sub 

Etapa 5: defina uma string após End With, na qual você precisa usar Execute e encontre todos os padrões correspondentes.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub 

Etapa 6: Agora, use Execute na variável denominada string para descobrir todas as correspondências associadas a um determinado padrão.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Definir correspondências = RegEx.Execute (Str) End Sub 

Etapa 7: Use o loop For para imprimir o valor de todos os padrões correspondentes na janela de saída imediata.

Código:

 Sub RegEx_Ex3 () Dim RegEx como objeto, Str como conjunto de strings RegEx = CreateObject ("VBScript.RegExp") com RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Definir correspondências = RegEx.Execute (Str) para cada correspondência em correspondências Debug.Print Match.Value Próxima correspondência End Sub 

Etapa 8: execute esse código pressionando F5 ou o botão executar e veja a saída na janela de saída imediata.

Este código imprime todo o número de correspondências para o padrão definido.

Coisas para lembrar

  • A expressão regular do VBA pode ser usada apenas para descobrir as seqüências de caracteres. Obviamente, para valores numéricos, não precisamos dessa função. Todos os valores numéricos considerados em cada um dos três exemplos acima são realmente definidos como uma sequência.
  • O Excel VBA RegEx deve ser usado para manipulação de cadeias sempre que houver um grande volume de dados. Não usar o VBA RegEx reduz a eficiência do programa.
  • O VBA RegEx falha quando há cenários em que um padrão está repetindo n número de vezes ou infinito para esse efeito.

Artigos recomendados

Este foi um guia para o VBA RegEx. Aqui discutimos como usar o Excel VBA RegEx, juntamente com alguns exemplos práticos e modelo de excel para download. Você também pode consultar nossos outros artigos sugeridos -

  1. Como usar o VBA Replace no Excel?
  2. Usando Inserir comentário no Excel
  3. Criando VBA TIMER no Excel
  4. Fórmula IF aninhada no Excel

Categoria: