Les expressions régulières sont utilisées pour la correspondance de motifs.
Pour 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 pour Applications", sélectionnez "Outils" dans le menu supérieur.
- Sélectionnez "Références"
- Cochez la case à côté de "Microsoft VBScript Regular Expressions 5.5" à inclure dans votre classeur.
- Cliquez sur OK"
Étape 2 : définissez votre modèle
Définitions basiques:
-
Intervalle.
- Par exemple,
a-z
correspond à des lettres minuscules de a à z
- Par exemple,
0-5
correspond à n'importe quel nombre de 0 à 5
[]
Faites correspondre exactement l'un des objets à l'intérieur de 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 différents matchs à 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 consécutives a:aa
- Par exemple ,
[a]{1,3}
correspond à au moins un et jusqu'à trois lettres minuscules a
, aa
,aaa
+
Faites correspondre au moins un ou plusieurs des motifs définis avant lui.
- Par exemple ,
a+
correspondra à un consécutive de a
, aa
, aaa
, etc.
?
Faites correspondre zéro ou l'un des motifs définis avant lui.
- Par exemple, le 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 à n'importe quelle lettre minuscule.
*
Faites correspondre zéro ou plus du motif défini avant lui. - Par exemple, Wildcard 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 un et se terminant par tout sauf\n
|
Opérateur OU
- Par exemple,
a|b
signifie soit a
ou b
peut être apparié.
- Par exemple,
red|white|orange
correspond exactement à l'une des couleurs.
^
PAS opérateur
- Par exemple, le
[^0-9]
caractère ne peut pas contenir de nombre
- Par exemple, le
[^aA]
caractère ne peut pas être en minuscule a
ou en majusculeA
\
É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, le
^a
premier caractère doit être une lettre minusculea
- Par exemple, le
^[0-9]
premier caractère doit être un nombre.
$
La correspondance doit se produire à la fin de la chaîne
- Par exemple, le
a$
dernier caractère doit être une lettre minusculea
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éfinies:
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 dans la cellule A1
pour voir si les 1 ou 2 premiers caractères sont des chiffres. Si tel est le cas, ils sont supprimés et le reste de la chaîne s'affiche. Sinon, une boîte apparaît vous indiquant qu'aucune correspondance n'est trouvée. Les A1
valeurs de cellule de 12abc
renverront abc
, la valeur de 1abc
renverra abc
, la valeur de abc123
renverra "Non apparié" car les chiffres n'étaient 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
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 en tant que fonction dans la cellule
Cet exemple est le même que l'exemple 1 mais est configuré pour s'exécuter en tant que 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 cordes ("12abc") dans la cellule A1
. Entrez cette formule =simpleCellRegex(A1)
dans la cellule B1
et le résultat sera "abc".
Exemple 3 : boucle à travers la plage
Cet exemple est le même que l'exemple 1, mais il parcourt 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
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 une plage ( A1
, A2
& A3
) et recherche une chaîne commençant par trois chiffres suivis d'un seul caractère alpha, puis de 4 chiffres. La sortie sépare la correspondance des motifs en cellules adjacentes à l'aide de la ()
. $1
représente le premier motif correspondant dans le premier ensemble 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
Résultats:
Exemples de modèles 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 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