Le espressioni regolari vengono utilizzate per la corrispondenza dei modelli.
Per utilizzare in Excel attenersi alla seguente procedura:
Passaggio 1 : aggiungi il riferimento VBA a "Microsoft VBScript Regular Expressions 5.5"
- Seleziona la scheda "Sviluppatore" ( Non ho questa scheda cosa devo fare? )
- Selezionare l'icona "Visual Basic" dalla sezione della barra multifunzione "Codice"
- Nella finestra "Microsoft Visual Basic, Applications Edition" selezionare "Strumenti" dal menu in alto.
- Seleziona "Riferimenti"
- Seleziona la casella accanto a "Microsoft VBScript Regular Expressions 5.5" da includere nella cartella di lavoro.
- Fai clic su "OK"
Passaggio 2 : definire il modello
Definizioni di base:
- Gamma.
- Ad esempio,
a-zcorrisponde a lettere minuscole dalla a alla z
- Ad esempio,
0-5corrisponde a qualsiasi numero compreso tra 0 e 5
[] Abbina esattamente uno degli oggetti all'interno di queste parentesi.
- Ad esempio
[a]corrisponde alla lettera a
- Ad esempio,
[abc]corrisponde a una singola lettera che può essere a, b o c
- Ad esempio,
[a-z]corrisponde a qualsiasi singola lettera minuscola dell'alfabeto.
()Raggruppa partite diverse a scopo di restituzione. Vedi esempi di seguito.
{} Moltiplicatore per copie ripetute del modello definito prima.
- Ad esempio,
[a]{2}corrisponde a due lettere consecutive minuscole a:aa
- Ad esempio,
[a]{1,3}corrisponde ad almeno uno e fino a tre lettera minuscola a, aa,aaa
+ Abbina almeno uno, o più, del modello definito prima di esso.
- Ad esempio,
a+corrisponderà consecutivo una di a, aa, aaae così via
? Abbina zero o uno dei pattern definiti prima.
- Ad esempio, il modello può essere presente o meno, ma può essere associato solo una volta.
- Ad esempio,
[a-z]?corrisponde a una stringa vuota o a una singola lettera minuscola.
* Corrisponde a zero o più del modello definito prima. - Ad esempio, carattere jolly per motivi che potrebbero essere presenti o meno. - Ad esempio, [a-z]*corrisponde a una stringa vuota o una stringa di lettere minuscole.
. Corrisponde a qualsiasi personaggio tranne Newline \n
- Ad esempio
a.Corrisponde a una stringa di due caratteri che inizia con a e termina con qualsiasi cosa tranne\n
| Operatore OR
- Ad esempio
a|bsignifica che ao bpuò essere abbinato.
- Ad esempio,
red|white|orangecorrisponde esattamente a uno dei colori.
^ NON operatore
- Ad esempio, il
[^0-9]carattere non può contenere un numero
- Ad esempio, il
[^aA]carattere non può essere in minuscolo ao maiuscoloA
\ Sfugge al carattere speciale che segue (ignora il comportamento sopra)
- Ad esempio
\., \\, \(, \?, \$,\^
Schemi di ancoraggio:
^ La corrispondenza deve verificarsi all'inizio della stringa
- Ad esempio, il
^aprimo carattere deve essere una lettera minuscolaa
- Ad esempio, il
^[0-9]primo carattere deve essere un numero.
$ La corrispondenza deve avvenire alla fine della stringa
- Ad esempio, l'
a$ultimo carattere deve essere una lettera minuscolaa
Tabella di precedenza:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Abbreviazioni di caratteri predefinite:
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
Esempio 1 : Esegui come macro
La seguente macro di esempio esamina il valore nella cella A1per vedere se i primi 1 o 2 caratteri sono cifre. In tal caso, vengono rimossi e viene visualizzato il resto della stringa. In caso contrario, viene visualizzata una finestra in cui viene indicato che non è stata trovata alcuna corrispondenza. I A1valori delle celle di 12abcrestituiranno abc, il valore di 1abcrestituirà abc, il valore di abc123restituirà "Non abbinato" perché le cifre non erano all'inizio della stringa.
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
Esempio 2 : Esegui come funzione nella cella
Questo esempio è uguale all'esempio 1 ma è configurato per essere eseguito come una funzione in-cell. Per usare, cambia il codice in questo:
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
Posiziona le stringhe ("12abc") nella cella A1. Inserisci questa formula =simpleCellRegex(A1)nella cella B1e il risultato sarà "abc".

Esempio 3 : Loop Through Range
Questo esempio è uguale all'esempio 1 ma scorre in un intervallo di celle.
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
Esempio 4 : dividere modelli diversi
Questo esempio scorre in un intervallo ( A1, A2& A3) e cerca una stringa che inizia con tre cifre seguite da un singolo carattere alfa e quindi da 4 cifre numeriche. L'output divide le corrispondenze del modello in celle adiacenti utilizzando il (). $1rappresenta il primo modello corrispondente all'interno del primo set di ().
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
risultati:

Esempi di pattern aggiuntivi
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