Macro para comparar dos libros con sus hojas iguales

Me gustaría un macro (opción con botón) donde me pida abrir dos archivos excel que continen las mismas pestañas que dichas pestañas se llaman igual, comparar que cada celda de cada pestaña de los dos libros continenen la misma información, y resaltar las celdas que no coincidan.

1 Respuesta

Respuesta
1

Te anexo la macro.

Te pedirá abrir el libro 1 y luego te pedirá abrir el libro 2.

Realizará las comparaciones y marcará de amarillo las celdas que sean diferentes.

Las hojas de ambos libros deberán estar acomodadas en la misma forma y deberán tener el mismo número de hojas.

Sub Comparar_2Libros()
'Por Dante Amor
    '
    'Selecciona primer libro
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione PRIMER libro"
        .Filters.Clear
        .Filters.Add "Archivos excel", "*.xls*"
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path & "\"
        '.Show
        If .Show = False Then Exit Sub
        '
        Set l1 = Workbooks.Open(.SelectedItems.Item(1))
        'Selecciona segundo libro
        .Title = "Seleccione SEGUNDO libro"
        If .Show = False Then
            l1.Close False
            Exit Sub
        End If
        '
        Set l2 = Workbooks.Open(.SelectedItems.Item(1))
    End With
    '
    If l1.Sheets.Count <> l2.Sheets.Count Then
        MsgBox "Los libros no tienen el mismo número de hojas", vbExclamation
        Exit Sub
    End If
    '
    'Compara 1 con 2
    For h = 1 To l1.Sheets.Count
        For Each celda1 In l1.Sheets(h).UsedRange
            If celda1.Value <> l2.Sheets(h).Range(celda1.Address).Value Then
                celda1.Interior.ColorIndex = 6
                l2.Sheets(h).Range(celda1.Address).Interior.ColorIndex = 6
            End If
        Next
    Next
    'Compara 2 con 1
    For h = 1 To l2.Sheets.Count
        For Each celda2 In l2.Sheets(h).UsedRange
            If celda2.Value <> l1.Sheets(h).Range(celda2.Address).Value Then
                celda2.Interior.ColorIndex = 6
                l1.Sheets(h).Range(celda2.Address).Interior.ColorIndex = 6
            End If
        Next
    Next
    l1.Close True
    l2.Close True
    MsgBox "Fin de la Comparación"
End Sub

.

.

He tenido que quitar al final l1.close true y l2.close true porque se me cerraban los libros sin ver los cambios en Amarillo.

Otra cosilla, se podría indicar si el formato cambia (variación en el numero de columnas, filas, celdas combinadas,...)

Muchas gracias

De hecho la macro revisa si hay más datos en una hoja o en otra, por ejemplo, si en el libro1, hoja1, tienes datos hasta la columna M y en el libro2, hoja1, solamente tienes datos hasta la columna L, entonces los datos del libro1, hoja1, columna M son marcados. Lo mismo para las filas.

Qué tipo de formato quieres revisar, ¿solamente el de celdas combinadas? ¿O cualquier formato de la celda?

Por supuesto cuenta con mi ayuda, solamente crea una nueva pregunta. En el desarrollo de la pregunta escribe para Dante Amor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas