Officefull.es

Excel, word, powerpoint, android

Separar Nombres-Apellidos septiembre 8, 2008

Separar nombre-apellidos Excel

Por Héctor Miguel Orozco Díaz

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, …puede ser toda una Odisea.

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 qué 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 más 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 …Y..según nuestra necesidad deberemos entonces utilizar las funciones Concatenar o concatenar Si o bien concatenar.SI que encontraréis en los artículos en la web.

Categorías: Sin categoría

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *