Macro para comparar dos columnas excel con formato de datos distinto

Necesito saber si los registros se corresponden con el código de cada uno de ellos

Por ejemplo:

001 Rodríguez Lopera, Miguel Ángel con 001 Gómez García, Manuel

01010 ANTONIO JOSE MENA MENDEZ con 01010 Mena Méndez, Antonio José

02710 ALFREDO RUIZ ARANDA con 02710 Ruiz Aranda, Alfredo

02310-106 JOSE MARIA CASARRUBUELOS BURGOS0 con 2310-106Casarrubuelos Burgos, José María13509-91 MIGUEL ANGEL RODRIGUEZ LOPERA con 13509-91Rodríguez Lopera, Miguel Ángel

Estos son los casos previsibles,

En la columna izquierda es el dato importado y segunda y tercera corresponde a los datos buenos desde donde hay que revisar, que el código corresponda con el nombre:

El código siempre se corresponderá pero el nombre podría corresponder a otra persona

Con lo que se estaría haciendo una asignación errónea y esto lo que se necesita revisar y son muchos registros y con mucha frecuencia.

Ojo pongo estos casos en los que los espacios no son los mismos.

Si se precisa, envío una hoja excel para más detalle.

1 respuesta

Respuesta
1

H o l a:

Sí, envíame tu archivo de excel y me explicas qué quieres comparar y qué esperas como resultado, todo explicado con ejemplos reales.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Carlos Martin” y el título de esta pregunta.

Te acabo de enviar fichero con el detalle

H o l a:

Te anexo la macro para revisar los nombres. Sigue las indicaciones para realizar las comparaciones.

Sub Revisar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then u = 2
    With Range("G2:G" & u)
        .Formula = "=TRIM(RC[-6])"
        .Value = .Value
        .Copy
        [A2].PasteSpecial xlValues
        .ClearContents
    End With
    '
    For i = 2 To u
        nombre = UCase(Cells(i, "A"))
        nombres = Split(nombre, " ")
        num = nombres(0)
        existe = False
        Set r = Columns("C")
        Set b = r.Find(num, lookat:=xlPart)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                'detalle
                base = acentos(UCase(Cells(b.Row, "D")))
                For j = 1 To UBound(nombres)
                    importado = acentos(nombres(j))
                    If InStr(1, base, importado) > 0 Then
                        Cells(i, "B") = "Coincidencias: " & j & " en la fila " & b.Row
                        existe = True
                    End If
                Next
                If existe Then Exit Do
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
            If existe = False Then
                Cells(i, "B") = existe
            End If
        Else
            Cells(i, "B") = "Revisar. El código no existe"
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Revisión terminada", vbInformation, "REVISAR"
End Sub

1. En la hoja2 te puse un botón para ejecutar la macro

2. En la columna A deberás poner tus datos importados, según el ejemplo que me enviaste los datos importados están en una sola columna.

3. En la columna C deberás poner el código y en la columna D el nombre de la base de datos.

4. La macro te pone 3 resultados diferentes en la columna B

a) Si el código de los importados no existe, en la base de datos: "Revisar. El código no existe"

b) Si el código existe, pero el nombre no tiene ninguna coincidencia: "Falso"

c) Si el código existe, entonces te pone el número de coincidencias y el número de fila de la base de datos que coincide.


Te anexo la macro actualizada

Sub Revisar()
'Por.Dante Amor
    Application.ScreenUpdating = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    If u = 1 Then u = 2
    With Range("G2:G" & u)
        .Formula = "=TRIM(RC[-6])"
        .Value = .Value
        .Copy
        [A2].PasteSpecial xlValues
        .ClearContents
    End With
    '
    u2 = 2
    Do While Cells(u2, "C") <> ""
        u2 = u2 + 1
    Loop
    '
    For i = 2 To u
        nombre = UCase(Cells(i, "A"))
        nombres = Split(nombre, " ")
        num = Left(nombres(0), 3)
        existe = False
        Set r = Range("C2:C" & u2)
        Set b = r.Find(num, lookat:=xlPart)
        If Not b Is Nothing Then
            ncell = b.Address
            Do
                'detalle
                base = acentos(UCase(Cells(b.Row, "D")))
                For j = 1 To UBound(nombres)
                    importado = acentos(nombres(j))
                    If InStr(1, base, importado) > 0 Then
                        Cells(i, "B") = "Coincidencias: " & j & " en la fila " & b.Row
                        existe = True
                    End If
                Next
                If existe Then Exit Do
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> ncell
            If existe = False Then
                Cells(i, "B") = existe
            End If
        Else
            Cells(i, "B") = "Revisar. El código no existe"
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Revisión terminada", vbInformation, "REVISAR"
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

¡Gracias! 

Hola Dante, he hecho varias pruebas y ahora ya me está funcionando perfectamente.

Termino de adaptarla.

No sabes cuanto te agradezco tu ayuda 

De nuevo, muy agradecido y un millón de gracias.

Hola Dante

Te ruego si por favor me puedes revisar una macro que me da el siguiente problema

Ya tengo todo el código anterior trabajando perfectamente.

Pero he creado otra macro para que me importe los datos que necesito revisar y en un libro si me encuentra la fecha y en el libro definitivo no me encuentra la fecha y por más que lo miro no sé que puede ser.

Si me das el Ok te envío el código.

Muchas gracias.

Crea una nueva pregunta en el tema de microsoft excel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas