Détails
Comment utiliser les expressions régulières (Regex) dans Microsoft Excel, aussi bien dans les cellules que dans les boucles.
Comment utiliser les expressions régulières dans Excel et tirer parti de la puissante configuration en grille d'Excel pour la manipulation des données ?
- Fonction dans la cellule pour renvoyer un modèle correspondant ou une valeur remplacée dans une chaîne.
- Fonction secondaire permettant de parcourir en boucle une colonne de données et d'extraire les correspondances avec les cellules adjacentes.
- Quelle configuration est nécessaire ?
- Quels sont les caractères spéciaux d'Excel pour les expressions régulières ?
Je comprends que Regex n'est pas idéal pour de nombreuses situations (To use or not to use regular expressions ?) puisque Excel peut utiliser des commandes de type Left
, Mid
, Right
, Instr
pour des manipulations similaires.
548
3
Les [expressions régulières] (http://en.wikipedia.org/wiki/Regular_expressions) sont utilisées pour la correspondance de motifs.
Pour les utiliser dans Excel, suivez les étapes suivantes :
Etape 1 : Ajouter la référence VBA à "Microsoft VBScript Regular Expressions 5.5" ;
Étape 2 : Définissez votre modèle
Définitions de base:
-
Gamme.a-z
correspond aux lettres minuscules de a à z.[]
Correspond exactement à l'un des objets contenus dans ces crochets.[a]
correspond à la lettre a.()
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.[a]{2}
correspond à deux lettres minuscules a consécutives :aa
[a]{1,3}
correspond à au moins une et jusqu'à trois lettres minusculesa
,aa
,aaa
.+
Correspond à au moins un, ou plus, du motif défini avant lui.a+
correspondra aux a's consécutifsa
,aa
,aaa
, et ainsi de suite.?
Correspond à zéro ou un des motifs définis avant lui.[a-z]?
correspond à une chaîne vide ou à une seule lettre minuscule.*
Correspond à zéro ou plus du motif défini avant lui.[a-z]*
correspond à une chaîne vide ou à une chaîne de lettres minuscules..
Correspond à n'importe quel caractère sauf le saut de ligne\n
a.
correspond à une chaîne de deux caractères commençant par a et se terminant par n'importe quoi sauf\n
.|
Opérateur ORa|b
signifie que l'on peut faire correspondre soita
soitb
.rouge|blanc|orange
correspond à une seule des couleurs.Opérateur
^
NOT[^0-9]
ne peut pas contenir un nombre.[^aA]
ne peut pas être una
minuscule ou unA
majuscule.Le caractère spécial qui suit est échappé (remplace le comportement ci-dessus).
.`, `\\\`,
(,
\?,
\$,
\^`Modèles d'ancrage:
^
La correspondance doit se produire au début de la chaîne de caractères.^a
Le premier caractère doit être la lettre minusculea
.^[0-9]
Le premier caractère doit être un chiffre.$
La correspondance doit intervenir à la fin de la chaîne de caractères.a$
Le dernier caractère doit être la lettre minusculea
.Tableau de préséance:
Abréviations de caractères prédéfinis:
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 indiquer qu'aucune correspondance n'a été trouvée. Dans la cellule
A1
, la valeur12abc
renvoieabc
, la valeur1abc
renvoieabc
, la valeurabc123
renvoie "Not Matched" ; parce que les chiffres ne sont pas au début de la chaîne.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 in-cell. Pour l'utiliser, modifiez le code comme suit :
Placez votre chaîne de caractères ("12abc" ;) dans la cellule
A1
. Entrez cette formule=simpleCellRegex(A1)
dans la celluleB1
et le résultat sera "abc" ;.! [entrer la description de l'image ici] [1]
Exemple 3 : Loop Through Range
Cet exemple est identique à l'exemple 1, mais boucle sur une plage de cellules.
Exemple 4 : Séparation de différents motifs
Cet exemple parcourt en boucle une plage (
A1
,A2
& ;A3
) et recherche une chaîne de caractères commençant par trois chiffres, suivie d'un seul caractère alphabétique, puis de quatre chiffres. La sortie divise les correspondances de motifs en cellules adjacentes à l'aide du signe "()".
$1représente le premier motif trouvé dans le premier ensemble de
()`.Résultats :
![entrez la description de l'image ici][2]
Exemples supplémentaires de motifs
[1] : http://i.stack.imgur.com/q3RRC.png [2] : http://i.stack.imgur.com/9eCZ5.png
Pour utiliser les expressions régulières directement dans les formules Excel, l'UDF (user defined function) suivante peut être utile. Elle expose plus ou moins directement la fonctionnalité des expressions régulières comme une fonction Excel.
Comment cela fonctionne-t-il ?
Elle prend 2 ou 3 paramètres.
$0
,$1
,$2
, et ainsi de suite.$0
est la correspondance entière,$1
et plus correspondent aux groupes de correspondance respectifs dans l'expression régulière. La valeur par défaut est$0
.Quelques exemples
Extraction d'une adresse électronique :
Résultats :
some@email.com
Extraction de plusieurs sous-chaînes :
Résultats :
Mail électronique : some@email.com, Nom : Peter Gordon
Pour décomposer une chaîne combinée dans une seule cellule en ses composants dans plusieurs cellules :
Résultats :
Peter Gordon
some@email.com
...Comment utiliser
Pour utiliser cette UDF, procédez comme suit (en vous basant sur [cette page Microsoft][1]. Elle contient des informations complémentaires intéressantes) :
ALT+F11
pour ouvrir l'éditeur Microsoft Visual Basic for Applications.Regex
et la fonctionregex
provoque des erreurs #NAME!).![Deuxième icône dans la rangée d'icônes -> Module][4] 4. Dans la grande fenêtre de texte au milieu, insérez ce qui suit :
[1] : https://support.office.com/en-in/article/Create-Custom-Functions-in-Excel-2007-2f06c10b-3622-40d6-a1b2-b6748ae8231f "Cette page Microsoft" ; [2] : /questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops#answer-22542835 [3] : http://i.stack.imgur.com/etyH4.png [4] : http://i.stack.imgur.com/nlTpn.png
Voici ma tentative :