Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Iniciar sesiónIniciar sesiónCrear cuentaCrear cuenta

Excel - separar nombres y apellidos

Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:

separar nombres y apellidos

Autor:Luis (2 intervenciones)
Fecha:26/05/2012 12:22:12
Hola
Queria separar nombres y apellidos que tengo en una misma celda a celdas: Nombre, Apellido1, Apellido2
El problema que me encuentro es al separar nombres tales como maria jose....
ejemplo

Nombre completo nombre apellido1 apellido2
juan diaz lópez juan diaz lopez
maria jose perez valcarce maria jose perez valcarce
ana maria pardo vazquez ana maria pardo vazquez

Un saludo y gracias
Responder
información
Otras secciones de LWP con contenido similar...
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

separar nombres y apellidos

Autor:Martha (216 intervenciones)
Fecha:26/05/2012 13:07:59
No hay forma porque nuestro nombre y apellidos no siguen un patrón como pueda ser el de los estadounidenses que ponen nombre, inicial del segundo nombre y un solo apellido.
Aquí, al menos en España, hay nombres que también son apellido, y no todo el mundo tiene un nombre compuesto como suele ocurrir en latino américa. Y hay casos en los que teniendo un nombre compuesto solo usamos y nos registramos con uno.
Bien, lo que yo he hecho cuando he tenido que limpiar una Base de datos, con algunos miles de nombres ha sido separarlos por el espacio, haciendo uso de la función encontrar, y metiendo el espacio entre dos comillas. La función encontrar te da la posición del espacio, la función largo el número de caracteres, y si restas la posición del primer espacio con el número de caracteres, la función izquierda te extrae el nombre. Lo repites un par de veces y puedes separar cada uno de los elementos. Después los ordenas y en una columna aparte seleccionas (a mano) si es nombre o apellido. Es tedioso, pero es la única forma que he visto.
Comentar
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

separar nombres y apellidos

Autor:Luis (2 intervenciones)
Fecha:26/05/2012 14:08:28
aver yo lo que di hecho fue esto:
pero para ello tengo que tener en el orden siguiente:
apellido1+apellido2+nombre, de esta manera me lo deja hacer asi:

nombre: =EXTRAE((REEMPLAZAR((B2);(HALLAR(" ";(B2)));1;""));(HALLAR(" ";(REEMPLAZAR((B2);(HALLAR(" ";(B2)));1;""))))+1;((LARGO((REEMPLAZAR((B2);(HALLAR(" ";(B2)));1;""))))-(HALLAR(" ";(REEMPLAZAR((B2);(HALLAR(" ";(B2)));1;""))))))
apellido1: =IZQUIERDA(B2;(HALLAR(" ";B2))-1)
apellido 2: =IZQUIERDA((DERECHA(B2;(LARGO(B2))-(HALLAR(" ";B2))));(HALLAR(" ";(DERECHA(B2;(LARGO(B2))-(HALLAR(" ";B2))))))-1)

yo pretendo hacer esto mismo pero cuando los datos los tenga de la siguiente manera
nombre+apellido1+apellido2

es decir habria que empezar a buscar por la parte derecha(en lugar de la izaquierda, como hice anteriormete) para asi dejar los nombre complejos para el final.

gracias
Comentar
Ampliar imágen de perfil de JuanC
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

separar nombres y apellidos

Autor:JuanC juanc2942@gmail.com (908 intervenciones)
Fecha:26/05/2012 18:25:59
Como no tenía nada que hacer... me puse a hacer algo al respecto...
Hice una macro que combina nombres y apellidos (hasta 4 palabras en total)
y crea una lista desplegable ordenada con las combinaciones posibles...
Sólo queda por elegir la opción correcta en cada lista...
Quizá no sea lo mejor, pero creo que puede ayudar... y además es adaptable a otros problemas...

En el ejemplo los datos están en el rango A1:A100 y las listas aparecen en la columna B

Option Explicit Option Private Module '//By JuanC - 26 May. 2012 Private Const cSEP = ";" '//El separador NO puede ser una coma (,) Sub main() Dim s$, i%, p%, t$ Dim rng As Range, c As Range Dim m(4) As String On Error Resume Next Application.ScreenUpdating = False Set rng = Range("A1:A100") For Each c In rng s = VBA.LCase(c.Text) s = fClear(s) If s = "" Then GoTo siga p = 0 For i = 0 To 3 m(i) = "" m(i) = VBA.Split(s, " ")(i) If m(i) <> "" Then p = p + 1 Next If p = 1 Then Call AddList(c.Offset(0, 1), Excel.WorksheetFunction.Proper(s) & ",") ElseIf p = 2 Then t = VBA.Mid(s, 1, VBA.InStr(1, s, " ") - 1) & "; " & VBA.Trim(VBA.Mid(s, VBA.InStr(1, s, " ") + 1, VBA.Len(s))) & "," t = t & VBA.Trim(VBA.Mid(s, VBA.InStr(1, s, " ") + 1, VBA.Len(s)) & "; " & VBA.Mid(s, 1, VBA.InStr(1, s, " ") - 1)) Call AddList(c.Offset(0, 1), Excel.WorksheetFunction.Proper(t)) ElseIf p = 3 Then Call g3(c, m(0), m(1), m(2)) ElseIf p = 4 Then Call g4(c, m(0), m(1), m(2), m(3)) Else c.Offset(0, 1).Value = "" End If siga: Next Application.ScreenUpdating = True MsgBox "Proceso finalizado!" End Sub Private Sub g3(rngPivot As Range, a$, b$, c$) Dim v As Variant, i%, j%, m As Variant, s$ Dim lst() As Variant, n% m = Array("A.BC", "B.AC", "C.AB", "BA.C", "CA.B", "CB.A") For j = 0 To UBound(m) v = cmb3(m(j), a, b, c) For i = 0 To 1 ReDim Preserve lst(n) lst(n) = v(i) n = n + 1 Next Next Call fQuickSort(lst, 0, UBound(lst)) s = "" For i = 0 To UBound(lst) s = s & "," & Excel.WorksheetFunction.Proper(lst(i)) Next Call AddList(rngPivot.Offset(0, 1), VBA.Mid(s, 2)) Erase lst End Sub Private Sub g4(rngPivot As Range, a$, b$, c$, d$) Dim v As Variant, i%, j%, m As Variant, s$ Dim lst() As Variant, n% m = Array("A.BCD", "A.BDC", "A.CBD", "A.CDB", "A.DBC", "A.DCB", "B.ACD", "B.ADC", "B.CAD", "B.CDA", "B.DAC", "B.DCA", _ "C.ABD", "C.ADB", "C.BAD", "C.BDA", "C.DAB", "C.DBA", "D.ABC", "D.ACB", "D.BAC", "D.BCA", "D.CAB", "D.CBA", _ "AB.CD", "AB.DC", "AC.BD", "AC.DB", "AD.BC", "AD.CB", "BA.CD", "BA.DC", "BC.DA", "BD.CA", "CB.DA", "DB.CA") n = 0 For j = 0 To UBound(m) v = cmb4(m(j), a, b, c, d) For i = 0 To 1 ReDim Preserve lst(n) lst(n) = v(i) n = n + 1 Next Next Call fQuickSort(lst, 0, UBound(lst)) s = "" For i = 0 To UBound(lst) s = s & "," & Excel.WorksheetFunction.Proper(lst(i)) Next Call AddList(rngPivot.Offset(0, 1), VBA.Mid(s, 2)) Erase lst End Sub Private Function cmb3(s As Variant, a$, b$, c$) As Variant Dim v(2) As String Dim t$ t = VBA.Replace(s, "A", a & " ") t = VBA.Replace(t, "B", b & " ") t = VBA.Replace(t, "C", c & " ") t = VBA.Replace(t, ".", cSEP) t = VBA.Trim(VBA.Replace(t, " " & cSEP, cSEP & " ")) t = VBA.Replace(t, " ", " ") v(0) = (t) v(1) = VBA.Trim(VBA.Mid(t, VBA.InStr(1, t, cSEP) + 1, VBA.Len(t)) & cSEP & " " & VBA.Mid(t, 1, VBA.InStr(1, t, cSEP) - 1)) cmb3 = v End Function Private Function cmb4(s As Variant, a$, b$, c$, d$) As Variant Dim v(2) As String Dim t$ t = VBA.Replace(s, "A", a & " ") t = VBA.Replace(t, "B", b & " ") t = VBA.Replace(t, "C", c & " ") t = VBA.Replace(t, "D", d & " ") t = VBA.Replace(t, ".", cSEP) t = VBA.Trim(VBA.Replace(t, " " & cSEP, cSEP & " ")) t = VBA.Replace(t, " ", " ") v(0) = (t) v(1) = VBA.Trim(VBA.Mid(t, VBA.InStr(1, t, cSEP) + 1, VBA.Len(t)) & cSEP & " " & VBA.Mid(t, 1, VBA.InStr(1, t, cSEP) - 1)) cmb4 = v End Function Private Sub AddList(rng As Range, s$) On Error Resume Next With rng.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=(s) .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With rng.Value = VBA.Mid(s, 1, VBA.InStr(1, s, ",") - 1) End Sub Private Function fClear(ByVal s As String) As String Dim i% s = VBA.Replace(s, ",", "") s = VBA.Replace(s, ".", "") s = VBA.Replace(s, ";", "") s = VBA.Replace(s, "-", "") s = VBA.Replace(s, "_", "") For i = 20 To 2 Step -1 s = VBA.Replace(s, String(i, " "), " ") Next fClear = s End Function Private Sub fQuickSort(vArray As Variant, l As Long, R As Long) Dim i As Long, j As Long Dim X, Y i = l j = R X = vArray((l + R) / 2) Do While (i <= j) DoEvents Do While (vArray(i) < X And i < R) i = i + 1 Loop Do While (X < vArray(j) And j > l) j = j - 1 Loop If (i <= j) Then Y = vArray(i) vArray(i) = vArray(j) vArray(j) = Y i = i + 1 j = j - 1 End If Loop If (l < j) Then fQuickSort vArray, l, j If (i < R) Then fQuickSort vArray, i, R End Sub

Saludos, desde Baires, JuanC
Comentar