Separar Nombres-Apellidos Excel

Imprimir
PDF

Microsoft Most Valuable Professional

 

Separar Nombres y Apellidos Excel

 

Separar nombre-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 Yell

 

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 >>

 

separar nombres - apellidos

o bien tenemos >>

desglosar nombres - apellidos

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 >>

 

nombres separados y apellidos

 

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 !!