Expressões regulares são usadas para a correspondência de padrões.
Para usar no Excel, siga estas etapas:
Etapa 1 : Adicione referência VBA a "Microsoft VBScript Regular Expressions 5.5"
- Selecione a guia "Desenvolvedor" ( não tenho essa guia, o que devo fazer? )
- Selecione o ícone "Visual Basic" na seção da faixa de opções 'Código'
- Na janela "Microsoft Visual Basic for Applications", selecione "Ferramentas" no menu superior.
- Selecione "Referências"
- Marque a caixa ao lado de "Microsoft VBScript Regular Expressions 5.5" para incluir na sua pasta de trabalho.
- Clique OK"
Etapa 2 : defina seu padrão
Definições básicas:
- Alcance.
- Por exemplo,
a-zcombina letras minúsculas de a a z
- Por exemplo,
0-5corresponde a qualquer número de 0 a 5
[] Combine exatamente um dos objetos dentro desses colchetes.
- Por exemplo,
[a]corresponde à letra a
- Por exemplo,
[abc]corresponde a uma única letra que pode ser a, b ou c
- Por exemplo,
[a-z]corresponde a qualquer letra minúscula do alfabeto.
()Agrupa diferentes correspondências para fins de retorno. Veja exemplos abaixo.
{} Multiplicador para cópias repetidas do padrão definido antes dele.
- Por exemplo,
[a]{2}corresponde a duas letras minúsculas consecutivas a:aa
- Por exemplo,
[a]{1,3}corresponde a pelo menos um e até três letra minúscula a, aa,aaa
+ Combine pelo menos um, ou mais, do padrão definido antes dele.
- Por exemplo,
a+irá corresponder consecutiva de um a, aa, aaa, e assim por diante
? Corresponder a zero ou um dos padrões definidos antes dele.
- Por exemplo, o padrão pode ou não estar presente, mas só pode ser correspondido uma vez.
- Por exemplo,
[a-z]?corresponde a uma string vazia ou a qualquer letra minúscula.
* Corresponder a zero ou mais do padrão definido antes dele. - Por exemplo, curinga para o padrão que pode ou não estar presente. - Por exemplo, [a-z]*corresponde a uma sequência vazia ou a uma sequência de letras minúsculas.
. Corresponde a qualquer caractere, exceto nova linha \n
- Por exemplo,
a.corresponde a uma cadeia de dois caracteres começando com a e terminando com qualquer coisa, exceto\n
| Operador OR
- Por exemplo,
a|bsignifica aou bpode ser correspondido.
- Por exemplo,
red|white|orangecorresponde exatamente a uma das cores.
^ Operador NOT
- Por exemplo, o
[^0-9]caractere não pode conter um número
- Por exemplo, o
[^aA]caractere não pode ser minúsculo aou maiúsculoA
\ Escapa o caractere especial a seguir (substitui o comportamento acima)
- Por exemplo
\., \\, \(, \?, \$,\^
Padrões de ancoragem:
^ A correspondência deve ocorrer no início da string
- Por exemplo, o
^aprimeiro caractere deve ser minúsculoa
- Por exemplo, o
^[0-9]primeiro caractere deve ser um número.
$ A correspondência deve ocorrer no final da sequência
- Por exemplo, o
a$último caractere deve ser minúsculoa
Tabela de precedência:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Abreviações de caracteres predefinidas:
abr same as meaning
\d [0-9] Any single digit
\D [^0-9] Any single character that's not a digit
\w [a-zA-Z0-9_] Any word character
\W [^a-zA-Z0-9_] Any non-word character
\s [ \r\t\n\f] Any space character
\S [^ \r\t\n\f] Any non-space character
\n [\n] New line
Exemplo 1 : Executar como Macro
O exemplo a seguir macro analisa o valor na célula A1para ver se os primeiros 1 ou 2 caracteres são dígitos. Nesse caso, eles são removidos e o restante da string é exibido. Caso contrário, será exibida uma caixa informando que nenhuma correspondência foi encontrada. Os A1valores de célula de 12abcretornarão abc, o valor de 1abcretornará abc, o valor de abc123retornará "Não correspondido" porque os dígitos não estavam no início da sequência.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1")
If strPattern <> "" Then
strInput = Myrange.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
Exemplo 2 : Executar como uma função na célula
Este exemplo é o mesmo que o exemplo 1, mas está configurado para ser executado como uma função na célula. Para usar, altere o código para isso:
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "^[0-9]{1,3}"
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
simpleCellRegex = regEx.Replace(strInput, strReplace)
Else
simpleCellRegex = "Not matched"
End If
End If
End Function
Coloque suas cordas ("12abc") na célula A1. Digite esta fórmula =simpleCellRegex(A1)na célula B1e o resultado será "abc".

Exemplo 3 : Loop Through Range
Este exemplo é o mesmo que o exemplo 1, mas percorre um intervalo de células.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A5")
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
Exemplo 4 : Separando Padrões Diferentes
Este exemplo percorre um intervalo ( A1, A2& A3) e procura uma sequência que comece com três dígitos seguidos por um único caractere alfa e depois por quatro dígitos numéricos. A saída separa as correspondências do padrão em células adjacentes usando o (). $1representa o primeiro padrão correspondente dentro do primeiro conjunto de ().
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A3")
For Each C In Myrange
strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
If strPattern <> "" Then
strInput = C.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
C.Offset(0, 1) = regEx.Replace(strInput, "$1")
C.Offset(0, 2) = regEx.Replace(strInput, "$2")
C.Offset(0, 3) = regEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = "(Not matched)"
End If
End If
Next
End Sub
Resultados:

Exemplos adicionais de padrões
String Regex Pattern Explanation
a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters
a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceding alpha character
a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters
a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters
</i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit