Cambiar orden de información de una celda

En una celda tengo nombre apellido paterno y apellido materno

Hay manera de cambiar y poner el nombre al final, ¿para iniciar con el apellido paterno?

2 Respuestas

Respuesta
1

·

Supondremos que el nombre puede ser compuesto, pero no los apellidos, eso ya sería rizar el rizo.

Prueba con esta macro, escribe el nombre en la celda A1 y luego la ejecutas. Es fácil traspasarla a otras celdas.

Sub CambiarNombre()
    Dim cadena, car As String
    Dim i, lon, palabras As Integer
    cadena = [A1]
    cadena = Trim(cadena)
    lon = Len(cadena)
    If lon <= 3 Then
        MsgBox ("Faltan datos")
        Exit Sub
    End If
    palabras = 1
    i = lon
    While (i > 0) And (palabras < 3)
        car = Mid(cadena, i, 1)
        i = i - 1
        If car = " " Then
            While (Mid(cadena, i, 1) = " ") And i > 0
                i = i - 1
            Wend
            If i > 0 Then palabras = palabras + 1
        End If
    Wend
    If palabras < 3 Then
        MsgBox ("Faltan datos")
        Exit Sub
    End If
    [A1] = Mid(cadena, i + 2) + ", " + Left(cadena, i)
End Sub

Y eso es todo, espero que te sirva, ya me dirás.  Si necesitas más ayuda dímelo.

¿Y se podría manejar par un listado?

Si, por supuesto. ¿Te sirve que lo haga para todos los nombres que haya en la columna A desde la posición segunda al final? Si no, dime más concretamente lo que quieres.

Esta es la macro para modificar toda una columna de golpe. Los nombres empiezan en la segunda fila pero es facíl poner otra modificandolo en la línea

for j=2 to final

Asimismo he hecho que los nombres se lean de la columna A y se escriban en la B. Se puede modificar esto en las dos primeras líneas donde se definen las constantes ColOrig y ColDestin, incluso puede ponerse la misma columna destino que la origen, que a lo mejor e3s eso lo que quieres hacer

Sub IntercambiarNombre()
    Const ColOrig = "A"
    Const ColDestin = "B"
    Dim cadena, car As String
    Dim i, j, lon, palabras, final As Integer
    final = Range(ColOrig & Rows.Count).End(xlUp).Row
    For j = 2 To final
        cadena = Cells(j, ColOrig)
        cadena = Trim(cadena)
        lon = Len(cadena)
        If lon >= 5 Then
            palabras = 1
            i = lon
            While (i > 0) And (palabras < 3)
                car = Mid(cadena, i, 1)
                i = i - 1
                If car = " " Then
                    While (Mid(cadena, i, 1) = " ") And i > 0
                        i = i - 1
                    Wend
                    If i > 0 Then palabras = palabras + 1
                End If
            Wend
            If palabras >= 3 Then
                Cells(j, ColDestin) = Mid(cadena, i + 2) + ", " + Left(cadena, i)
            End If
        End If
    Next j
End Sub

Y eso es todo, espero que te sirva y si no entiendes algo pregúntame.

Respuesta

Cambiar de orden se puede, el problema son los nombres compuestos (María José, Miguel Ángel) ¿Cómo distinguirías un segundo nombre de un primer apellido?

La verdad no tengo como distinguir esos nombres compuesto,

Seria como una segunda revisión y detectar esos compuesto para cambiar el segundo nombre, esa segundo trabajo no me afecaria demasiado.

¿Tiene alguna sugerencia?

Sí, suponiendo que no haya nombres compuestos y la primera palabra sea el nombre puedes utilizar las fórmulas como en este ejemplo (en fila 1 resultados visibles y en fila 2 el texto de las fórmulas). Asumo que los apellidos tiene como máximo 50 caracteres:

Explicación: la fórmula ENCONTRAR encuentra el primer espacio en blanco y con EXTRAE y la información anterior se secciona el texto y se separa en dos celdas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas