Alguna vegada t'han donat un full de treball d'Excel amb noms, en el qual els noms complets estan tots en una cel·la? La vostra tasca és dividir els noms en nom i cognom, un procés conegut com a anàlisi. Podeu provar d'utilitzar una fórmula i/o funció per ajudar-vos, o podeu utilitzar el codi de Visual Basic per a aplicacions (VBA).
Un enfocament habitual és trobar l'espai entre el nom i el cognom, i voilà! – saps on acaba el nom i on comença el cognom.
A menys que tingueu noms d'estructura més complexa, com ara el Dr. William Healer o Zak H. Sneezer III.
Aquí hi ha una rutina típica de VBA que examina cada nom, caràcter per caràcter, fins que troba un espai. A continuació, col·loca el que està a l'esquerra de l'espai en una columna i el que està a la dreta de l'espai a la columna posterior.
Fes fins a ActiveCell = "
thename = ActiveCell.Value
Per buscar = 1 a Len (el nom)
Si Mid(el nom, buscant, 1) = " " Aleshores
ActiveCell.Offset (0, 1) = Esquerra (el nom, buscant - 1)
ActiveCell.Offset (0, 2) = Mitjana (el nom, buscant + 1)
Sortida per
Acaba si
Pròxim
ActiveCell.Offset(1, 0).Activar
Bucle
Aquesta rutina és útil per analitzar noms amb un sol espai, com ara Harvey Wallbanger o Tom Collins. La taula següent mostra el resultat d'executar el codi en noms amb més d'un espai:
| Dr. William Healer |
Dr. |
Guillem Sanador |
| Zak H. Esternut III |
Zak |
H. Esternut III |
Aquest no és un bon intent d'anàlisi. Va funcionar bé per analitzar Harvey Wallbanger i Tom Collins, però no tan bé per als altres noms.
Aquí hi ha una tècnica més desenvolupada que retorna millors resultats. Tingueu en compte que analitzar noms no és perfecte, però fer-ho d'aquesta manera fa un millor treball.
La tècnica consisteix a comptar quants espais hi ha al nom complet i després dividir el nom en un dels espais. En particular, si hi ha tres o més espais, utilitzeu l'espai a dos de la dreta com a espai de trencament; en cas contrari, utilitzeu l'espai més a la dreta com a espai de ruptura.
Aquest procés s'executa en una subrutina VBA que crida a una funció mentre fa un bucle pels noms. El nombre d'espais es determina al principi del bucle principal i la funció retorna la posició on es troba l'espai de ruptura.
Subparse_names()
Atenua el nom com a cadena
Atenuar els espais com a nombre enter
Fes fins a ActiveCell = "
thename = ActiveCell.Value
espais = 0
Per a la prova = 1 a Len (el nom)
Si Mid(el nom, prova, 1) = " " Aleshores
espais = espais + 1
Acaba si
Pròxim
Si espais >= 3 Aleshores
break_space_position = posició_espai ("", el nom, espais - 1)
Altrament
break_space_position = posició_espai ("", el nom, espais)
Acaba si
Si espais > 0 Aleshores
ActiveCell.Offset (0, 1) = Esquerra (el nom, break_space_position - 1)
ActiveCell.Offset (0, 2) = Mitjana (el nom, break_space_position + 1)
Altrament
' això és per quan el nom complet és només un nom únic sense espais
ActiveCell.Offset(0, 1) = el nom
Acaba si
ActiveCell.Offset(1, 0).Activar
Bucle
End Sub
Funció space_position(what_to_look_for Com a cadena, what_to_look_in Com a cadena, space_count Com a enter) Com a sencer
Dim loop_counter com a nombre enter
posició_espai = 0
Per a loop_counter = 1 a space_count
posició_espai = InStr(comptador_de_bucles + posició_espai, què_buscar, què_buscar)
Si space_position = 0 Aleshores Surt For
Pròxim
Funció final
La taula següent mostra com es veu el resultat ara:
| Dr. William Healer |
Dr Guillem |
Sanador |
| Zak H. Esternut III |
Zak H. |
Esternut III |
L'anàlisi de noms és tant art com procés tècnic. En aquest segon exemple, tots els noms i cognoms es troben a les columnes correctes. Si s'introduïa un nom llarg nou amb cinc o més espais, la rutina podria equivocar-se en l'anàlisi i el codi VBA necessitaria més proves condicionals. Però aquest exemple està ara pel bon camí com a rutina d'anàlisi de noms de força industrial.