Vidéo: Excel_VBA: Comment lister les cellules et plages nommées contenues dans une feuille spécifique 2025
Avez-vous déjà reçu une feuille de calcul Excel avec des noms, dont tous les noms sont en un cellule? Votre tâche consiste à diviser les noms en prénom, nom de famille - un processus connu sous le nom de analyse. Vous pouvez essayer d'utiliser une formule et / ou une fonction, ou vous pouvez utiliser le code Visual Basic pour Applications (VBA).
Une approche commune consiste à trouver l'espace entre le prénom et le nom de famille, et voilà! - vous savez où le prénom se termine et le nom de famille commence.
Sauf si vous avez des noms de structure plus complexe, tels que Dr. William Healer ou Zak H. Sneezer III.
Voici une routine VBA typique qui parcourt chaque nom, caractère par caractère, jusqu'à ce qu'il trouve un espace. Ensuite, il place tout ce qui est à gauche de l'espace dans une colonne et tout ce qui est à la droite de l'espace dans la colonne après.
Faire jusqu'à ActiveCell = "thename = ActiveCell. Value Pour regarder = 1 To Len (thename) Si Mid (thename, looking, 1) =" "Puis ActiveCell. Offset (0, 1) = Gauche (thename, looking - 1) ActiveCell Offset (0, 2) = Mid (thename, recherche + 1) Exit For End Si Next ActiveCell Offset (1, 0) Activer Loop
Cette routine est utile pour analyser les noms avec un seul espace, tel que Harvey Wallbanger ou Tom Collins Le tableau suivant montre le résultat de l'exécution du code sur les noms avec plus d'un espace:
Dr William Healer | Dr < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Ce n'est pas une bonne tentative de parsing.Il a bien fonctionné pour analyser Harvey Wallbanger et Tom Collins, mais pas si bien pour les autres noms. |
Voici une technique plus élaborée qui donne de meilleurs résultats: gardez à l'esprit que l'analyse syntaxique des noms n'est pas parfaite, mais que ça marche mieux.
Ce processus est exécuté dans un sous-programme VBA qui appelle une fonction tout en faisant défiler les noms. Le nombre d'espaces est déterminé au début de la boucle principale et la fonction renvoie la position où se trouve l'espace de rupture.
Sub parse_names () Dim thename As String Dim espaces As Integer Do jusqu'à ActiveCell = "thename = ActiveCell. Valeur espaces = 0 Pour test = 1 à Len (thename) Si Mid (thename, test, 1) =" "Puis espaces = espaces + 1 Fin Si Suivant Si espaces> = 3 Alors break_space_position = space_position ("", thename, espaces - 1) Sinon break_space_position = space_position ("", thename, espaces) Fin Si If espaces> 0 Puis ActiveCell.Décalage (0, 1) = Gauche (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Sinon 'c'est pour quand le nom complet est juste un seul nom sans espaces ActiveCell. Offset (0, 1) = thename End Si ActiveCell. Décalage (1, 0). Activer Loop End Sub Fonction space_position (what_to_look_for As String, what_to_look_in As String, espace_count As Integer) Entier Dim loop_counter Entier space_position = 0 Pour loop_counter = 1 Pour space_count space_position = InStr (loop_counter + espace_position, what_to_look_in, what_to_look_for) Si space_position = 0 Ensuite, quittez pour la fonction de fin suivante
Le tableau suivant montre à quoi ressemble le résultat maintenant:
Dr. William Healer
Dr. William | Guérisseur | Zak H. Sneezer III |
Zak H. | Sneezer III | L'analyse du nom est autant un art qu'un processus technique. Dans ce second exemple, tous les noms et prénoms sont dans les colonnes correctes. Si un nouveau nom long avec cinq espaces ou plus a été introduit, la routine risque d'être fausse, et le code VBA nécessiterait plus de tests conditionnels. Mais cet exemple est maintenant sur la bonne voie en tant que routine d'analyse de nom de force industrielle. |
