Saltar al contenido

Separar texto de una celda (apellidos y nombres)


Recommended Posts

publicado

He traído una nueva inquietud, reciban saludos.

¿Cómo separar completamente nombres y apellidos a través de una macro? Es decir, poner primer nombre en B2, segundo nombre en C2, primer apellido en D2, segundo apellido en E2, y así respectivamente con cada uno de los ejemplos.

¿Es posible?

Libro1.rar

publicado

como no existe la seguridad de que todos en el listado sean 2 nombres y 2 apellidos, y tampoco existe la certeza de cuales pudieran ser "compuestos", en cualquiera de las siguientes propuestas habrás de ajustar (mover) algunos datos a "su columna" correspondiente:

op1: (sin macros y conservando los nombres del listado original)

1) escribe la siguiente formula en [b2]

=sustituir(sustituir(sustituir(sustituir(sustituir(sustituir(nompropio(espacios(a2))," Del "," Del|")," De La "," De|La|")," De Los "," De|Los|")," De Las "," De|Las|")," De "," De|")," Y ","|Y|")[/CODE]

toma nota que mi separador de argumentos es la coma

2) copia la formula al resto de celdas en la columna B

3) selecciona el rango > copiar > pegar valores

4) con el rango seleccionado: datos > texto en columnas > delimitados (espacio) > finalizar

5) amplia el rango y usa la herramienta: reemplazar barra "|" por espacio " "

op2: (macros y sustituyendo [o aprovechando] la columna original)

[CODE]Sub separaNombres(): Application.ScreenUpdating = False
' procedimiento para distribuir nombres y apellidos en columnas separadas ' _
R&D: Héctor Miguel Orozco Díaz (original en julio, 2008) '
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 .Resize(, .CurrentRegion.Columns.Count): .Cells.Replace What:="|", Replacement:=" "
.Value = Evaluate("transpose(proper(transpose(" & .Address & ")))")
.Cells.Replace What:=" Y ", Replacement:=" y ": .EntireColumn.AutoFit
End With: End With: End Sub[/CODE]

saludos,

hector.

  • 4 months later...
publicado

asumiendo que SIEMPRE serán dos apellidos y dos nombres separados por una coma y que NO habrá apellidos/nombre "compuestos" (?), dos opciones (con los datos en [A1]):

=izquierda(extrae(a1,hallar(", ",a1)+2,50),hallar(" ",extrae(a1,hallar(", ",a1)+2,50)&" "))&izquierda(a1,hallar(" ",a1)-1)

=izquierda(extrae(a1,hallar("|",sustituir(a1," ","|",2))+1,50),sumaproducto(hallar("|",sustituir(a1," ","|",{2,3})),{-1,1}))&izquierda(a1,hallar(" ",a1)-1)

OJO con el separador de argumentos, mi sistema usa coma y en la segunda opción se requiere que sepas que caracteres admite tu configuración para identificar filas/columnas en matrices constantes (entre llaves)

saludos,

hector.

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.