VBA INSTRREV

Excel VBA INSTRREV

VBA INSTRREV Function, comme signifie 'In String Reverse' , renvoie la position de la première occurrence d'une chaîne de recherche (sous-chaîne) dans une autre chaîne, à partir de la fin de la chaîne (de droite à gauche) à partir de laquelle nous recherchons une chaîne de recherche.

La fonction INSTRREV commence la recherche de la chaîne de recherche à partir de la fin de la chaîne dans laquelle nous devons trouver mais compte la position depuis le début. Il existe une autre fonction INSTR vba (signifie 'In String' ) qui recherche également une chaîne dans une autre chaîne et renvoie la position, mais cette fonction démarre la recherche à partir du début de la chaîne à partir de laquelle nous recherchons la chaîne de recherche.

INSTRREV et INSTR , tous deux sont des fonctions VBA String / Texte intégrées de MS Excel. Nous pouvons les utiliser lors de l'écriture de n'importe quelle macro dans Microsoft Visual Basic Editor.

Syntaxe

Comme nous pouvons le voir dans l'image ci-dessus, il y a 2 arguments obligatoires et 2 optionnels.

  • StringCheck As String: il s'agit de l'argument requis. Nous devons donner l'expression de chaîne recherchée.
  • StringMatch As String: cet argument est également requis. Nous devons spécifier l'expression de chaîne recherchée.
  • Start As Long = -1: il s'agit d'un argument facultatif. Nous spécifions l'expression numérique. Par défaut, il prend -1, ce qui signifie que la recherche commence à la dernière position de caractère. Si nous spécifions une valeur positive telle que 80, la recherche commence à la fin de la chaîne dans les 80 caractères de gauche.
  • Compare As VbCompareMethod = vbBinaryCompare As Long: cet argument est facultatif.

Nous pouvons spécifier les valeurs suivantes pour cet argument.

Valeurs de retour

  1. La fonction INSTRREV renvoie 0 si la vérification de la chaîne  est de longueur nulle ou si la correspondance de chaîne  n'est pas trouvée ou si l' argument 'start' > longueur de la correspondance de chaîne .
  2. Cette fonction renvoie «Null» si une vérification de chaîne  ou une correspondance de chaîne  est «Null» .
  3. Si la correspondance de chaîne est de longueur nulle, la fonction revient au début .
  4. Si une correspondance de chaîne est trouvée dans une vérification de chaîne , la fonction renvoie la position à laquelle la correspondance est trouvée.

Comment utiliser la fonction VBA INSTRREV?

Vous pouvez télécharger ce modèle Excel VBA INSTRREV ici - Modèle Excel VBA INSTRREV

Supposons que nous ayons des données sur les noms de films et leurs réalisateurs. Nous voulons séparer les noms des réalisateurs.

Nous avons des données sur 1201 lignes. Si nous effectuons cette tâche manuellement, cela prendra beaucoup de temps.

Pour faire de même, nous utiliserons le code VBA. Les étapes sont:

  • Nous devons cliquer sur la commande 'Visual Basic' disponible dans le groupe 'Code' de l' onglet 'Développeur' ou nous pouvons appuyer sur Alt + F11 pour ouvrir l'éditeur Visual Basic.

  • Nous allons insérer un module en utilisant le menu «Insertion» .

  • Nous allons créer un sous-programme nommé «SplittingNames» .

  • Nous avons besoin de 6 variables. Un pour stocker les valeurs des cellules, que nous manipulerons. Deuxièmement pour stocker la position du premier espace dans la chaîne, troisième pour stocker la position du dernier espace dans la chaîne, quatrième pour stocker le dernier numéro de ligne, cinquième et sixième pour la ligne et la colonne que nous utiliserons pour imprimer les valeurs dans les cellules adjacentes.

  • Pour connaître la dernière ligne utilisée de la feuille, nous devons utiliser le code suivant.

Ce code sélectionnera d'abord la cellule B1, puis la dernière cellule utilisée dans la même colonne, puis nous attribuons le numéro de ligne de la cellule à la variable «LastRow».

  • Maintenant, pour manipuler toutes les cellules de la colonne B, nous allons lancer une boucle «for» .

  • Nous allons stocker la valeur des cellules de la colonne B de la ligne 2 à la ligne 1201 une par une dans la variable 's' pour les manipuler.

  • Nous devons définir la valeur de la variable «Colonne» sur 3 car nous devons écrire les noms de division en C (3e colonne) et une colonne en avant.

  • Si la chaîne n'est qu'un mot, cela signifie qu'il n'y a pas d'espace dans la chaîne, nous voulons la chaîne elle-même en sortie. Pour cela, nous allons spécifier la condition en utilisant 'If and Else statement' avec un astérisque (indiquant un ou plusieurs caractères) comme suit:

  • S'il y a de l'espace dans la chaîne, nous voulons diviser la chaîne. Pour faire de même, nous avons utilisé les fonctions INSTR et INSTRREV pour connaître respectivement la première position d'espace et la dernière position d'espace. Cela nous aidera à trouver respectivement le premier mot et le dernier mot de la chaîne.

La fonction INSTR prend l'argument comme ci-dessous:

Détails de l'argument

  • Début: à partir de quelle position commencer.
  • String1: Nous devons donner l'expression de chaîne recherchée.
  • String2: nous devons spécifier l'expression de chaîne recherchée.

Comparé à VbCompareMethod: spécification de la méthode de comparaison. Par défaut, il s'agit d'une comparaison binaire.

  • Nous devons utiliser la fonction vba LEFT pour extraire les caractères de gauche de la chaîne. Nous avons utilisé 'Last Space-1' pour obtenir les caractères de gauche avant le dernier espace.

Nous devons utiliser les fonctions DROITE et LEN pour extraire les bons caractères de la chaîne après le premier espace.

La macro est écrite. Il ne nous reste plus qu'à exécuter la macro à l'aide de la touche F5 .

Code:

 Sub SplittingNames () Dim s As String Dim FirstSpace As Long Dim LastSPace As Long Dim LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range ("B1"). Sélectionnez Selection.End (xlDown) .Select LastRow = ActiveCell. Row For Row = 2 To LastRow s = Sheet1.Cells (Row, 2) .Value Column = 3 If s Like "* *" Then FirstSpace = InStr (1, s, "") LastSPace = InStrRev (s, "") Sheet1.Cells (Row, Column) .Value = Left (s, LastSPace - 1) Sheet1.Cells (Row, Column + 1) .Value = Right (s, Len (s) - FirstSpace) Sinon Sheet1.Cells (Row, Colonne) .Valeur = s End If Next End Sub 

Nous avons un résultat maintenant.