Expressions régulières sont utilisés pour la correspondance de motifs. Pour les utiliser dans Excel, procédez comme suit.
Étape 1 : Ajouter une référence VBA à "Microsoft VBScript Regular Expressions 5.5".
- Sélectionnez l'onglet "Développeur" ( Je n'ai pas cet onglet, que dois-je faire ? )
- Sélectionnez l'icône "Visual Basic" dans la section du ruban "Code".
- Dans la fenêtre "Microsoft Visual Basic for Applications", sélectionnez "Outils" dans le menu supérieur.
- Sélectionnez "Références".
- Cochez la case en regard de "Microsoft VBScript Regular Expressions 5.5" pour l'inclure dans votre classeur.
- Cliquez sur "OK".
Étape 2 : Définissez votre modèle
Définitions de base :
-
Gamme.
- Par exemple
a-z
correspond à une lettre minuscule de a à z
- Par exemple
0-5
correspond à n'importe quel nombre de 0 à 5
[]
Faites correspondre exactement un des objets entre ces crochets.
- Par exemple
[a]
correspond à la lettre a
- Par exemple
[abc]
correspond à une seule lettre qui peut être a, b ou c
- Par exemple
[a-z]
correspond à n'importe quelle lettre minuscule de l'alphabet.
()
Regroupe les différentes correspondances à des fins de retour. Voir les exemples ci-dessous.
{}
Multiplicateur pour les copies répétées du motif défini avant lui.
- Par exemple
[a]{2}
correspond à deux lettres minuscules a consécutives : aa
- Par exemple
[a]{1,3}
correspond à au moins une et jusqu'à trois lettres minuscules a
, aa
, aaa
+
Correspond à au moins un, ou plusieurs, des motifs définis avant lui.
- Par exemple
a+
correspondra à des a consécutifs a
, aa
, aaa
et ainsi de suite
?
Correspond à zéro ou un des motifs définis avant lui.
- Par exemple, un motif peut être présent ou non, mais ne peut être apparié qu'une seule fois.
- Par exemple
[a-z]?
correspond à une chaîne vide ou à une seule lettre minuscule.
*
Correspond à zéro ou plus du motif défini avant lui. - Par exemple, un caractère générique pour un motif qui peut ou non être présent. - Par exemple [a-z]*
correspond à une chaîne vide ou à une chaîne de lettres minuscules.
.
Correspond à n'importe quel caractère sauf la nouvelle ligne \n
- Par exemple
a.
Correspond à une chaîne de deux caractères commençant par a et se terminant par n'importe quoi sauf \n
|
Opérateur OR
- Par exemple
a|b
signifie soit a
ou b
peuvent être appariés.
- Par exemple
red|white|orange
correspond exactement à l'une des couleurs.
^
opérateur NOT
- Par exemple
[^0-9]
le caractère ne peut pas contenir un nombre
- Par exemple
[^aA]
le caractère ne peut pas être minuscule a
ou majuscule A
\
Échappe le caractère spécial qui suit (remplace le comportement ci-dessus).
- Par exemple
\.
, \\
, \(
, \?
, \$
, \^
Modèles d'ancrage :
^
La correspondance doit se produire au début de la chaîne
- Par exemple
^a
Le premier caractère doit être une lettre minuscule a
- Par exemple
^[0-9]
Le premier caractère doit être un chiffre.
$
La correspondance doit se produire à la fin de la chaîne
- Par exemple
a$
Le dernier caractère doit être une lettre minuscule a
Tableau de priorité :
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Abréviations de caractères prédéfinis :
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
Exemple 1 : Exécuter en tant que macro
L'exemple de macro suivant examine la valeur de la cellule A1
pour voir si les 1 ou 2 premiers caractères sont des chiffres. Si c'est le cas, ils sont supprimés et le reste de la chaîne est affiché. Si ce n'est pas le cas, une boîte apparaît pour vous dire qu'aucune correspondance n'a été trouvée. Cellule A1
valeurs de 12abc
retournera abc
, la valeur de 1abc
retournera abc
, la valeur de abc123
renverra "Not Matched" parce que les chiffres ne sont pas au début de la chaîne.
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
strReplace = ""
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
Exemple 2 : Exécuter comme une fonction dans la cellule
Cet exemple est le même que l'exemple 1, mais il est configuré pour être exécuté comme une fonction dans la cellule. Pour l'utiliser, changez le code en ceci :
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
Placez vos chaînes ("12abc") dans la cellule A1
. Entrez cette formule =simpleCellRegex(A1)
en cellule B1
et le résultat sera "abc".
Exemple 3 : Gamme Loop Through
Cet exemple est identique à l'exemple 1, mais boucle sur une plage de cellules.
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
strReplace = ""
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
Exemple 4 : Séparation de différents motifs
Cet exemple parcourt en boucle une plage ( A1
, A2
& A3
) et recherche une chaîne commençant par trois chiffres, suivie d'un seul caractère alphabétique, puis de quatre chiffres. La sortie sépare les correspondances de motifs dans des cellules adjacentes en utilisant l'attribut ()
. $1
représente le premier modèle correspondant dans le premier ensemble de ()
.
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace 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
strReplace = "$1"
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
Résultats :
Exemples de motifs supplémentaires
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 preceeding 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
18 votes
Je recommande vivement cet article sur les expressions régulières VB/VBA par Patrick Matthews
1 votes
Essayez ce complément gratuit : seotoolsforexcel.com/regexpfind
5 votes
N'oublions pas l'
opérateur
`Like`, qui fournit une sorte de version allégée de la fonctionnalité de style regex. C'est généralement beaucoup plus rapide que regex, même s'il est enveloppé dans une procédure sub ou function.