VBA RegEx

VBA RegEx "Regular Expression" est très utile dans le monde de la programmation qui peut être utilisé pour valider l'entrée du site Web, la recherche de modèles de mots dans une grande chaîne / texte, pour la recherche et le remplacement de chaînes.

La plupart d'entre nous utilisent FIND, SUBSTITUTE, LEFT, RIGHT avec les fonctions MID pour la manipulation de chaînes dans Microsoft Excel, n'est-ce pas? Cependant, ces fonctions ont leurs propres limites qui ne peuvent pas être largement utilisées. Avoir des connaissances sur les expressions régulières VBA vous fera gagner beaucoup de temps dans votre vie de tous les jours. Les expressions régulières sont abrégées en «RegEx» (ou Regex) dans VBA. Dans ce tutoriel, nous allons jeter un œil à certains RegEx avec leur utilisation.

Vous pouvez utiliser un objet VBA RegEx qui est déjà créé dans la bibliothèque d'expressions régulières Microsoft VBScript. Vous pouvez parcourir cette bibliothèque en cliquant sur Outils - Référence - Expressions régulières Microsoft VBScript.

Vous pouvez également créer un objet RegEx à l'aide de la fonction CreateObject dans VBA. Cela semble plus pratique car vous n'avez pas toujours besoin de faire référence à la bibliothèque d'expressions régulières VBScript dans ce cas.

Voir le code ci-dessous:

 Dim regex comme ensemble d' objets regex = CreateObject ("VBScript.RegExp") 

Ce code vous permettra de créer et d'accéder à des objets RegEx dans votre macro. Personnellement, je préfère cette méthode à la première en raison de sa rigidité.

La fonction RegEx permet de manipuler les éléments suivants dans une longue chaîne.

  • Les caractères génériques comme *, ? etc.
  • Expressions groupées avec caractères génériques.

RegEx a ci-dessous les paramètres / propriétés:

  1. Pattern - Le modèle défini dans RegEx sur lequel vous souhaitez effectuer des opérations.
  2. IgnoreCase - Ignore la casse des lettres (les majuscules / non-majuscules sont identiques dans une chaîne).
  3. Global - Permet de trouver toutes les correspondances possibles s'il est défini sur TRUE. S'il est défini sur FALSE, il ne trouve que la première correspondance.
  4. MultiLine - Permet de faire correspondre le motif dans une chaîne qui est répartie sur plusieurs lignes.

RegEx facilite les trois opérations ci-dessous:

  • Test - Teste si le motif mentionné est présent ou non dans la chaîne. Si présent renvoie VRAI, sinon FAUX.
  • Remplacer - Remplace le motif d'origine par l'autre.
  • Exécuter - Renvoie tous les modèles correspondants recherchés.

Comment utiliser Excel VBA RegEx?

Nous allons apprendre à utiliser Excel VBA Regular Expression avec quelques exemples.

Vous pouvez télécharger ce modèle d'Excel VBA RegEx ici - Modèle d'Excel VBA RegEx

Excel VBA RegEx - Exemple # 1

Ici, vous vérifierez si le modèle mentionné est présent dans le texte à l'aide de RegEx.Test.

Suivez les étapes ci-dessous pour utiliser VBA RegEx.

Étape 1: définir une nouvelle sous-procédure pour créer une macro.

Code:

 Sub RegEx_Ex1 () End Sub 

Étape 2: Définissez deux variables RegEx comme un objet qui peut être utilisé pour créer un objet RegEx et Str comme une chaîne.

Code:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String End Sub 

Étape 3: créer un objet RegEx à l'aide de la fonction CreateObject.

Code:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Étape 4: Ajoutez le modèle à tester avec la fonction RegEx.

Code:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "(0-9) +" End With End Sub 

Étape 5: Définissez la chaîne dans laquelle nous devons vérifier le modèle donné.

Code:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "(0-9) +" End With Str = "Mon numéro de vélo est MH-12 PP- 6145 "End Sub 

Étape 6: Utilisez RegEx.Test pour tester si le modèle donné est présent dans la variable nommée Str. Utilisez également Debug.Print pour imprimer le résultat (vrai ou faux) dans la fenêtre immédiate.

Code:

 Sub RegEx_Ex1 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "(0-9) +" End With Str = "Mon numéro de vélo est MH-12 PP- 6145 "Debug.Print RegEx.Test (Str) End Sub 

Étape 7: Appuyez sur F5 ou sur le bouton Exécuter pour exécuter le code et voir la sortie. (Appuyez sur CTRL + G pour ouvrir la fenêtre immédiate)

Ici, nous avons créé un objet RegEx. Ensuite, avec VBA RegEx, nous avons vérifié si le modèle donné («(0-9) +») qui comprend tous les nombres / combinaison de nombres de 0 à 9 est présent dans la chaîne définie à l'aide de RegEx.Test ( Str). La sortie "True" sous la fenêtre immédiate montre que le motif "(0-9) +" est présent dans une chaîne donnée.

Excel VBA RegEx - Exemple # 2

Ici, vous verrez comment remplacer une chaîne par une autre à l'aide de RegEx.Replace.

Suivez les étapes ci-dessous pour utiliser VBA RegEx.

Étape 1: définissez une nouvelle sous-chaîne pour créer une macro.

Code:

 Sub RegEx_Ex2 () End Sub 

Étape 2: Comme dans le premier exemple, définissez deux variables RegEx comme un objet qui peut contenir la valeur de l'objet RegEx et Str qui contiendra la valeur de la chaîne que vous définirez.

Code:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String End Sub 

Étape 3: définissez l'objet RegEx et définissez-le sur la variable RegEx à l'aide de la fonction CreateObject.

Code:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Étape 4: Insérez le motif que vous souhaitez remplacer à l'aide de la fonction .Pattern.

Code:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123" End With End Sub 

Étape 5: Utilisez .GLOBAL = TRUE qui, si VRAI, permet de remplacer tous les modèles correspondants dans une chaîne donnée. Si FALSE ne remplace que le premier motif correspondant.

Code:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123" .Global = True 'Si FALSE, remplace uniquement la première chaîne correspondante' End With End Sub 

Étape 6: Après la fin avec, définissez la chaîne à laquelle vous souhaitez faire correspondre et remplacez le modèle par.

Code:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123" .Global = True 'Si FALSE, remplace uniquement la première chaîne correspondante' End With Str = Sous-extrémité "123-654-000-APY-123-XYZ-888" 

Étape 6: utilisez RegEx.Replace pour remplacer la valeur du modèle dans la chaîne donnée par un autre texte.

Code:

 Sub RegEx_Ex2 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123" .Global = True 'Si FALSE, remplace uniquement la première chaîne correspondante' End With Str = "123-654-000-APY-123-XYZ-888" Debug.Print RegEx.Replace (Str, "Replaced") End Sub 

Ici, nous voulions que le motif «123» soit remplacé par un autre morceau de ficelle. RegEx.Replace permet de remplacer la valeur du motif par le morceau de chaîne (nous avons défini «Remplacé»). Veuillez également consulter .Global = TRUE. Ce qui est une déclaration conditionnelle. Si Global = TRUE, la fonction Replace remplace tous les modèles correspondants par l'autre chaîne. Si GLOBAL = FALSE, la fonction Replace ne remplace que le premier modèle correspondant et les autres sont négligés.

Étape 7: Appuyez sur le bouton Exécuter ou sur F5 pour exécuter ce code et voir la sortie dans la fenêtre Sortie immédiate.

Excel VBA RegEx - Exemple # 3

Ici, vous verrez comment trouver tous les modèles correspondants dans une chaîne à l'aide de RegEx.Execute.

Suivez les étapes ci-dessous pour utiliser Excel VBA RegEx.

Étape 1: définissez une nouvelle sous-procédure pour ajouter la macro.

Code:

 Sub RegEx_Ex3 () End Sub 

Étape 2: Suivez les étapes identiques à celles des deux exemples précédents pour définir une expression régulière et une variable pouvant contenir la valeur de chaîne.

Code:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") End Sub 

Étape 3: Insérez un modèle que vous vouliez exécuter et faire correspondre dans la chaîne donnée.

Code:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123-XYZ" End With End Sub 

Étape 4: Utilisez .GLOBAL = TRUE pour que toutes les correspondances soient capturées dans la chaîne donnée.

Code:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") With RegEx .Pattern = "123-XYZ" .Global = True End With End Sub 

Étape 5: Définissez une chaîne après End With sous laquelle vous devez utiliser Execute et recherchez tous les modèles correspondants.

Code:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") Avec RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "End Sub 

Étape 6: Maintenant, utilisez Execute sur la variable nommée chaîne pour trouver toutes les correspondances associées à un modèle donné.

Code:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") Avec RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Set matches = RegEx.Execute (Str) End Sub 

Étape 7: utilisez la boucle For pour imprimer la valeur de tous les motifs correspondants dans la fenêtre de sortie immédiate.

Code:

 Sub RegEx_Ex3 () Dim RegEx As Object, Str As String Set RegEx = CreateObject ("VBScript.RegExp") Avec RegEx .Pattern = "123-XYZ" .Global = True End With Str = "123-XYZ-326-ABC- 983-670-PQR-123-XYZ "Set matches = RegEx.Execute (Str) For Each Match In matches Debug.Print Match.Value Next Match End Sub 

Étape 8: Exécutez ce code en appuyant sur F5 ou sur le bouton Exécuter et voyez la sortie sous la fenêtre de sortie immédiate.

Ce code imprime tout le nombre de correspondances pour le motif défini.

Choses dont il faut se rappeler

  • L'expression régulière VBA ne peut être utilisée que pour trouver les chaînes. Évidemment, pour les valeurs numériques, nous n'avons pas besoin d'une telle fonction. Toutes les valeurs numériques prises en compte dans chacun des trois exemples ci-dessus sont en fait définies comme une chaîne.
  • Excel VBA RegEx est censé être utilisé pour la manipulation de chaînes chaque fois qu'il y a de grandes données. Ne pas utiliser VBA RegEx réduit l'efficacité du programme.
  • VBA RegEx échoue lorsqu'il existe des scénarios où un modèle se répète n fois ou à l'infini pour cette raison.

Articles recommandés

Cela a été un guide pour VBA RegEx. Ici, nous avons discuté de la façon d'utiliser Excel VBA RegEx avec des exemples pratiques et un modèle Excel téléchargeable. Vous pouvez également consulter nos autres articles suggérés -

  1. Comment utiliser le remplacement VBA dans Excel?
  2. Utiliser Insérer un commentaire dans Excel
  3. Création de VBA TIMER dans Excel
  4. Formule IF imbriquée dans Excel

Catégorie: