Comparar dos bases de datos en excel, colorear los duplicados por nombre para después eliminarlos

Requiero de su apoyo para lo siguiente, tengo una base de datos con muchos campos, la cuál debo de compararla con una nueva base de datos, lo que quiero es hacer la comparación de datos para ver cuál o cuáles nombres se repiten en la nueva base de datos para que se sombreen o coloreen, para después eliminarlos, y no estarlo haciendo de uno por uno.

Podrían auxiliarme

1 respuesta

Respuesta
2

No das mucho detalle de como tienes estructurada tu información, así que supondré que la base de datos original esta en la hoja1 y la nueva base de datos esta en la hoja2, partiendo de este supuesto la siguiente macro lee la información original y le quita los nombres duplicados, luego compara estos nombres con los nombres de la base nueva a través de un autofiltro y lo colorea de rojo en caso de encontrarse el nombre en la base nueva, el resultado queda así en la hoja2

Y esta es la macro

Sub quitar_duplicados()
Set h1 = Worksheets("hoja1")
Set h2 = Worksheets("hoja2")

Set tabla1 = h1.Range("a1").CurrentRegion
Set tabla2 = h2.Range("a2").CurrentRegion

With tabla1
col = .Columns.Count
filas = .Rows.Count
Set resultados = .Columns(col + 3).Resize(filas, 1)
End With

With resultados
.Value = tabla1.Value
.RemoveDuplicates Columns:=1
For i = 1 To .Rows.Count
nombre = .Cells(i)
With tabla2
.AutoFilter 1, nombre
.Offset(1).Interior.ColorIndex = 3
End With
Next i
tabla2.AutoFilter
.CurrentRegion.Clear
End With

Set h1 = Nothing: Set h2 = Nothing
Set tabla1 = Nothing: Set tabla2 = Nothing
Set resultados = Nothing

End Sub

Agradezco Tu ayuda y aporte, una disculpa, no especifiqué cómo están los archivos, la base de datos que manejo está en un libro diferente a la otra, la macro que presentas sirve aún cuándo ambas bases de datos tienen columnas ocultas? o tengo que mostrarlas en ambos archivos para que coloree en ambas bases los datos duplicados para Yo después eliminarlos.

Gracias!

La macro que te presente es un ejemplo compara las columnas A de ambas hojas, el que tenga columnas ocultas no debe afectarlas a la hora de colorearlas, eso por un lado, por el otro considero innecesario colorealas pudiendo eliminarlas de dos formas durante el filtrado o bien al terminar de filtrarlas hacer un filtro por color y que la macro las borre todo a la vez tu ya no lo harías manual pues la macro haría todo, resumiendo tienes que definir sobre que columna sera la comparación en ambos libros, luego adaptar la macro para que haga esa comparación es relativamente fácil de hacer solo que como no pones ninguna pantalla de como esta estructurada tu información es difícil programarla adivinado.

Hola, mando impr de pantalla del cómo está estructurada la base de datos que manejo, en diferente libro:

Si notarás, en veces el nombre está muy separado porque así es cómo lo manejan en la base, aún así, la macro hace la función de que en ambos archivos se coloree los nombres que están repetidos?

Esta macro compara la base de datos de 2 libros solo que antes elimina pone los nombre de un mismo largo eliminando los espacios vacíos, e igual hace la comparación dejando coloreados los ya existentes en el libro2

Sub comparar_datos()
Set libro = Workbooks("prueba1.xlsm")
Set libro2 = Workbooks("prueba2.xlsx")
Set datos = libro.Sheets("hoja1").Range("a1").CurrentRegion
Set datos2 = libro2.Sheets("hoja1").Range("a1").CurrentRegion
With datos
    col = .Columns.Count
    FILAS = .Rows.Count
    Set tabla = .Columns(col + 3).Resize(FILAS, 1)
    With tabla
        .Formula = "=trim(" & datos.Cells(3).Address(0, 0) & ")"
        .Value = .Value
        Set tabla = .CurrentRegion
        datos.Columns(3).Value = .Value
        .RemoveDuplicates Columns:=1
    End With
With datos2
    col = .Columns.Count
    FILAS = .Rows.Count
    Set tabla2 = .Columns(col + 3).Resize(FILAS, 1)
    With tabla2
        .Formula = "=trim(" & datos.Cells(3).Address(0, 0) & ")"
        .Value = .Value
        datos2.Columns(3).Value = .Value
        .Clear
    End With
End With
With tabla
    FILAS = .Rows.Count
    For I = 2 To FILAS
        NOMBRE = .Cells(I)
        With datos2
            .AutoFilter 3, NOMBRE
            .Offset(1).Interior.ColorIndex = 4
        End With
    Next I
End With
    datos2.AutoFilter
End With
Set libro1 = Nothing: Set libro2 = Nothing
Set datos = Nothing: Set datos2 = Nothing
End Sub

Muchas gracias!, agradezco Tu tiempo, apoyo y ayuda! me ahorraste bastante tiempo!

La macro puede servir para futuras comparaciones independientemente de qué columna elegir?

Tengo otras preguntas, que me gustaría añadirte para que dieras respuesta pero me marca que no estás disponible, puff.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas