Fonction VBA : regexExtract

La fonction VBA regexExtract extrait une ou plusieurs parties d'une chaîne de caractères en utilisant des expressions régulières.

Utilisation :

regexExtract(texte, expression_régulière)

Si vous ne savez pas ce qu'est une expression régulière ou si vous ne savez pas comment en écrire une, commencez par lire le tutoriel complet de la fonction Excel REGEX.TEST avant de poursuivre.

Extraction sans parenthèses

La fonction regexExtract extrait ici le premier groupe de caractères en majuscules :

Sub exemple()
    
    texte = "ABC-7-DEFG-76-IJ"
    
    'Premier groupe de caractères en majuscules
    MsgBox regexExtract(texte, "[A-Z]+")
    
End Sub

excel vba ref regexextract

La regex ne contient ici aucune parenthèse, la valeur extraite est donc renvoyée directement sous forme de texte.

Extraction avec parenthèses

La fonction regexExtract doit extraire maintenant le premier groupe de caractères en majuscules en ignorant le premier (en vérifiant qu'il soit bien précédé par un caractère non alphanumérique).

Pour éviter de conserver le caractère non alphanumérique de test, des parenthèses sont utilisées pour définir la partie à conserver :

Sub exemple()
    
    texte = "REF = ABC-7-DEFG-76-IJ"
    
    'Premier groupe de caractères en majuscules à l'intérieur du texte
    arrayDebug regexExtract(texte, "\W([A-Z]+)")
    
End Sub

excel vba majuscules regexextract

Lorsqu'une regex contient des parenthèses, la ou les valeurs extraites sont renvoyées sous forme de tableau (pour afficher le contenu du tableau dans cet exemple, la fonction arrayDebug est utilisée).

Extraction cette fois-ci des 3 groupes de caractères en majuscules à l'aide de 3 paires de parenthèses :

Sub exemple()
    
    texte = "REF = ABC-7-DEFG-76-IJ"
    
    '3 groupes de caractères en majuscules à l'intérieur du texte
    arrayDebug regexExtract(texte, "\W([A-Z]+)[^A-Z]+([A-Z]+)[^A-Z]+([A-Z]+)")
    
End Sub

excel vba msgbox array regexextract

Si vous ne souhaitez pas obtenir un résultat sous forme de tableau, précisez simplement un séparateur en 3e argument :

Sub exemple()
    
    texte = "REF = ABC-7-DEFG-76-IJ"
    
    '3 groupes de caractères en majuscules à l'intérieur du texte
    MsgBox regexExtract(texte, "\W([A-Z]+)[^A-Z]+([A-Z]+)[^A-Z]+([A-Z]+)", ", ")
    
End Sub

excel vba msgbox regexextract

Plus d'exemples

D'autres exemples d'expressions régulières sont disponibles sur la page de la fonction Excel REGEX.TEST.

Remarque : cette fonction nécessite l'installation du pack de fonctions XLP (un add-in gratuit pour Excel qui ajoute 92 nouvelles fonctions).