|
07 Septiembre 2008

Separar Nombres y Apellidos Excel

Por Héctor Miguel Orozco Díaz
MVP MS- Excel
Muchas veces hemos tenido la necesidad de desglosar, separar nombres y apellidos en celdas separadas y hemos visto que es algo un tanto complejo si además también tenemos nombres y apellidos compuestos, entonces...pues puede ser toda una Odisea 
En este artículo os vamos a mostrar como podéis realizarlo
...
Desarrollo - Separar Nombres y Apellidos
Tenemos la siguiente base de datos en nuestra columna A en una Hoja de Excel >>

o bien tenemos >>

Y ...que nuestros nombre y apellidos son una Extensa columna a Desglosar, a Separar ...
Bien pues para ello emplearemos el siguiente código >>
Primer Código:
Sub Separa_compuestos()
Application.ScreenUpdating = False
With Range([a2], [a65536].End(xlUp))
.Value = Evaluate("transpose(trim(transpose(lower(" & .Address & "))))")
.Value = Evaluate("transpose(substitute(transpose(substitute(transpose(substitute(transpose(" & _
.Address & "),"" del "","" del|"")),"" de la "","" de|la|"")),"" de los "","" de|los|""))")
.Value = Evaluate("transpose(substitute(transpose(substitute(transpose(substitute(transpose(" & _
.Address & "),"" de las "","" de|las|"")),"" de "","" de|"")),"" y "",""|y|""))")
.TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, Space:=True
With .CurrentRegion: .Cells.Replace What:="|", Replacement:=" "
.Value = Evaluate("transpose(proper(transpose(" & .Address & ")))")
.Cells.Replace What:=" Y ", Replacement:=" y ": .EntireColumn.AutoFit
End With: End With: End Sub
Si tenemos una columna con unos pocos nombres a Desglosar, a Separar ...
Entonces aplicaremos el siguiente código >>
Segundo Código:
Sub Separa_nombres()
Application.ScreenUpdating = False
Dim Quita, Pon, n As Byte
Quita = Array(" del ", " de la ", " de los ", " de las ", " de ", " y ")
Pon = Array(" del|", " de|la|", " de|los|", " de|las|", " de|", "|y|")
With Range([a2], [a65536].End(xlUp))
.Value = Evaluate("transpose(trim(transpose(lower(" & .Address & "))))")
For n = LBound(Quita) To UBound(Quita)
.Cells.Replace What:=Quita(n), Replacement:=Pon(n), MatchCase:=False
Next
.TextToColumns Destination:=.Cells(1), DataType:=xlDelimited, Space:=True
With .CurrentRegion: .Cells.Replace What:="|", Replacement:=" "
.Value = Evaluate("transpose(proper(transpose(" & .Address & ")))")
.Cells.Replace What:=" Y ", Replacement:=" y ": .EntireColumn.AutoFit
End With: End With: End Sub
¿Por que aplicar uno u otro código ?
El primer código para listas +/- extensas de nombre y apellidos, no emplea ningún bucle y por lo tanto nuestro código ira mucho mas rápido que en el segundo código que emplea bucle for ...next para realizar los reemplazos originales en listas de pequeñas dimensiones...
quedándonos así como resultado de ambos códigos >>

Finalmente no queda otra que "echar OjO" y confirmar si se trata de composiciones:
Un nombre y dos apellidos, dos nombres y un apellido, ¿Cuántos nombres y cuántos apellidos?, etc ...
Según nuestra necesidad deberemos entonces utilizar las funciones Concatenar o concatenar Si o bien concatenar.SI que encontraréis en los artículos relacionados en la web [ ver el menú de la derecha ] o bien los siguientes articulos >>
Y como siempre os decimos... No hagáis mal uso de la información que se os proporciona
!!



