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-z
combina letras minúsculas de a a z
- Por exemplo,
0-5
corresponde 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|b
significa a
ou b
pode ser correspondido.
- Por exemplo,
red|white|orange
corresponde 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 a
ou 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
^a
primeiro 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 A1
para 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 A1
valores de célula de 12abc
retornarão abc
, o valor de 1abc
retornará abc
, o valor de abc123
retornará "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 B1
e 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 ()
. $1
representa 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