Macro para Comparar 2 Hojas Excel: Encuentra Cambios y Diferencias en Segundos

Macro para comparar hojas Excel de diferentes archivos

¿Necesitas comparar dos archivos Excel para detectar cambios o diferencias?. Esta macro para Comparar 2 hojas Excel automatiza el proceso, identificando discrepancias en valores, fórmulas y formatos de celda. Por lo tanto es ideal para auditorías, control de versiones y colaboración en equipos. Por lo tanto esta herramienta te permitirá ahorrar tiempo y esfuerzo al detectar diferencias de manera precisa y eficiente.

🔎 Índice de contenidos
  1. ¿Para Qué Sirve la Macro para Comparar 2 Hojas Excel?
  2. Tipos de Cambios que Detecta la Macro
  3. Beneficios de Usar esta Macro
  4. Usos Comunes de la Macro para Comparar dos Hojas Excel
  5. Cómo funciona la Macro para comparar 2 hojas Excel de distintos archivos.
  6. Cómo Configurar y Ejecutar la Macro para comparar
    1. Configurar Parámetros en hoja "Datos Macro"
    2. Ejecutar la Macro
    3. Resultados:
  7. Código VBA Completo: Macro para Comparar 2 Hojas Excel
  8. Descargar Archivo con la Macro para Comparar 2 Hojas Excel
  9. Preguntas Frecuentes (FAQ)
  10. Conclusión.

¿Para Qué Sirve la Macro para Comparar 2 Hojas Excel?

La macro esta implementada para comparar 2 hojas de diferentes archivos Excel y genera un informe detallado de las diferencias encontradas. Además genera una vista rápida resaltada en colores. Así mismo puedes usarla para muchos casos, te mencionare algunos:

  • Detectar cambios en valores, fórmulas y formatos.
  • Identificar discrepancias entre versiones antiguas y nuevas de un archivo.
  • Resaltar diferencias visuales, como colores de fondo y negritas.
  • Generar un informe organizado en una hoja llamada "Lista de Diferencias".

Tipos de Cambios que Detecta la Macro

La macro puede identificar varios tipos de diferencias entre las hojas y se va asignar un color a cada detección para una vista rápida por colores:

Tipo de DiferenciaColorEjemplo
ValoresAmarillo50 vs 60
FórmulasNaranja=A1+B1 vs =A1*2
Formato Color de fondoRosaFondo blanco vs verde
Formato NegritasAzul claroTexto normal vs negrita

Beneficios de Usar esta Macro

Descubre por qué esta herramienta es esencial para cualquier usuario avanzado de Excel:

También puedes leerGenerador-de-licencias-eset-nod32Generador de Licencias Eset Nod32 Gratis
  • Ahorro de tiempo: Automatiza un proceso que manualmente podría llevar horas.
  • Precisión absoluta: Identifica incluso las diferencias más pequeñas entre celdas.
  • Personalización: Puedes adaptarla para comparar rangos específicos o tipos de datos.
  • Resultados claros: Las diferencias se resaltan visualmente y se registran en una hoja organizada.
  • Versatilidad: Funciona con archivos grandes y complejos sin complicaciones.
  • Compatible con formatos anteriores: Funciona con archivos con extensión .xlsx y .xls

Usos Comunes de la Macro para Comparar dos Hojas Excel

Esta macro puede tener muchos usos y aplicaciones prácticas en nuestro día a día. Por lo tanto te mencionare algunas:

  • Control de Versiones: Compara versiones antiguas y nuevas de un archivo para identificar actualizaciones.
  • Auditorías de Datos: Detecta discrepancias en informes financieros, inventarios o bases de datos.
  • Colaboración en Equipos: Identifica cambios realizados por diferentes usuarios en un mismo archivo.
  • Validación de Copias de Seguridad: Verifica si las copias coinciden con los archivos originales.
  • Pruebas de Calidad: Útil para desarrolladores de macros o plantillas Excel que necesiten verificar cambios en pruebas

Cómo funciona la Macro para comparar 2 hojas Excel de distintos archivos.

La macro esta creada para comparar dos hojas Excel de distintos archivos. Vamos a explicar el funcionamiento general del código.

  • Ingresar datos de los archivos a comparar. Se debe completar todos los datos de cada archivo a comparar como: la ruta (ubicación), nombre de archivo con su extensión, nombre de la hoja a comparar.
  • Valida los datos ingresados en la hoja "Datos Macro". Verifica la ruta del archivo, nombre de archivo, nombre de hoja de ambos archivos. Si uno de los datos no existe o no se ingreso correctamente mostrará un mensaje de error y la macro no se ejecuta. En caso de estar todo correcto continua con el siguiente paso.
  • Limpieza de hojas a trabajar. Realiza una limpieza de la hoja "Lista de Diferencias" para borrar formatos y datos que contenga, así mismo elimina si existen las hojas Archivo1 y Archivo2, porque luego las creara con los datos de las hojas indicadas.
  • Copia las hojas de los archivos a macro y realiza comparación. Abre los archivos y copia cada hoja en el archivo macro (crea las hojas Archivo1 y archivo2) para realizar las comparaciones. Realiza las comparaciones de todas las celdas por valores, formatos, formulas.
  • Resultado y confirmación. Para una identificación visual de las diferencias se resalta la hoja "Archivo1" con todas las diferencia para una vista rápida. Así mismo se realiza una lista completa de todas las diferencias detalladas en la hoja "Lista de Diferencias". Al finalizar mostrará un mensaje de confirmación con la cantidad de diferencias encontradas.

Cómo Configurar y Ejecutar la Macro para comparar

La macro para Comparar 2 Hojas de Excel, necesita tener la información de las rutas, nombres y hojas de los archivos que deseamos comparar. Muy importante debes de habilitar las macros en Excel para que funcione.

Configurar Parámetros en hoja "Datos Macro"

Es necesario completar los campos correspondientes del archivo 1 (versión actual) y los datos del archivo 2 (copia o backup) en la hoja "Datos Macro".

También puedes leerGenerador de licencias Eset Smart PremiumGenerador de licencias ESET Smart Security Premium 2025
  • Ruta de archivos: Indicar la ubicación donde se encuentra los Excel, Para el archivo 1 actual en la Celda B5 y para el archivo 2 backup en la Celda E5.
  • Nombre del archivo: Colocar el nombre del archivo, el nombre debe tener su extensión. Para el archivo 1 actual en la Celda B7 y para archivo 2 backup en la celda E7.
  • Nombre de hoja a comparar: se debe especificar los nombres de las hojas que deseas comparar en cada archivo. Para el archivo 1 actual en la Celda B9 y para archivo 2 backup en la celda E9.
Comparar dos hojas Excel configurar datos

Ejecutar la Macro

Para ejecutar la macro debemos hacer clic en el botón "Comparar Hojas" y nos mostrar un mensaje de confirmación con la cantidad de diferencias encontradas.

Mensaje de confirmación

Consideraciones importantes que debemos de tener. En caso de escribir mal el nombre de hoja, ruta de archivo o nombre de archivo mostrará un mensaje con el error encontrado.

Resultados:

Al ejecutarse la macro, valida los datos configurados y abre los archivos según si esta todo correcto. Inmediatamente copia las hojas en el archivo de la macro, en las hojas Archivo1 y archivo2. Luego de comparar el resultado visual se encuentra en la hoja Archivo1 donde se va resaltar con los colores según las diferencia encontradas. Así mismo se va listar todas las diferencias en la hoja Lista de Diferencias.

Macro comparar 2 hojas -Resultado visual
Resultado Visual en Hoja Archivo1
Comparar 2 hojas Excel - Lista de diferencias
Lista de Diferencias Encontradas

Código VBA Completo: Macro para Comparar 2 Hojas Excel

Aquí te brindo el código VBA completo de la macro. Puedes copiarlo y pegarlo directamente en el editor de VBA:

También puedes leerQué es ESET LIVEGRIDESET LiveGrid
Option Explicit
'============================================
' MACRO PARA COMPARAR 2 ARCHIVOS - VERSIÓN FINAL
' Autor: licsafe.com
'============================================

Sub CompararArchivos()
    '--- Variables ---
    Dim wbMacro As Workbook, wbActual As Workbook, wbBackup As Workbook
    Dim wsDatos As Worksheet, wsArchivo1 As Worksheet, wsArchivo2 As Worksheet, wsDiferencias As Worksheet
    Dim rutaActual As String, rutaBackup As String, archivoActual As String, archivoBackup As String
    Dim hojaActual As String, hojaBackup As String
    Dim titulo As String
    Dim tiempoInicio As Double
    Dim filaDiferencias As Long
    Dim diferenciasEncontradas As Boolean
    
    '--- Configuración inicial ---
    titulo = "licsafe.com"
    tiempoInicio = Timer
    diferenciasEncontradas = False
    filaDiferencias = 2
    
    On Error GoTo ManejarError
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.DisplayAlerts = False
    
    Set wbMacro = ThisWorkbook
    Set wsDatos = wbMacro.Sheets("Datos Macro")
    Set wsDiferencias = wbMacro.Sheets("Lista de Diferencias")
    
    '--- Validaciones ---
    With wsDatos
        rutaActual = Trim(.Range("B5").Value)
        archivoActual = Trim(.Range("B7").Value)
        hojaActual = Trim(.Range("B9").Value)
        rutaBackup = Trim(.Range("E5").Value)
        archivoBackup = Trim(.Range("E7").Value)
        hojaBackup = Trim(.Range("E9").Value)
    End With
    
    If rutaActual = "" Or archivoActual = "" Or hojaActual = "" Or _
       rutaBackup = "" Or archivoBackup = "" Or hojaBackup = "" Then
        MsgBox "Complete todos los campos en 'Datos Macro'.", vbExclamation, titulo
        GoTo Finalizar
    End If
    
    ' Ajustar rutas (agregar \ si falta)
    If Right(rutaActual, 1) <> "\" Then rutaActual = rutaActual & "\"
    If Right(rutaBackup, 1) <> "\" Then rutaBackup = rutaBackup & "\"
    
    ' Verificar existencia de archivos
    If Dir(rutaActual & archivoActual) = "" Then
        MsgBox "El archivo actual no existe en la ruta indicada.", vbCritical, titulo
        GoTo Finalizar
    End If
    
    If Dir(rutaBackup & archivoBackup) = "" Then
        MsgBox "El archivo backup no existe en la ruta indicada.", vbCritical, titulo
        GoTo Finalizar
    End If
    
    ' Abrir archivos para validación
    Set wbActual = Workbooks.Open(rutaActual & archivoActual, ReadOnly:=True)
    Set wbBackup = Workbooks.Open(rutaBackup & archivoBackup, ReadOnly:=True)
    
    ' Validar hojas
    If Not HojaExiste(wbActual, hojaActual) Then
        MsgBox "La hoja '" & hojaActual & "' no existe en el archivo actual.", vbCritical, titulo
        wbActual.Close SaveChanges:=False
        wbBackup.Close SaveChanges:=False
        GoTo Finalizar
    End If
    
    If Not HojaExiste(wbBackup, hojaBackup) Then
        MsgBox "La hoja '" & hojaBackup & "' no existe en el archivo backup.", vbCritical, titulo
        wbActual.Close SaveChanges:=False
        wbBackup.Close SaveChanges:=False
        GoTo Finalizar
    End If

    '--- Copiar hojas completas al archivo macro ---
    On Error Resume Next
    wbMacro.Sheets("Archivo1").Delete
    wbMacro.Sheets("Archivo2").Delete
    On Error GoTo 0
    
    wbActual.Sheets(hojaActual).Copy After:=wbMacro.Sheets(wbMacro.Sheets.Count)
    Set wsArchivo1 = wbMacro.Sheets(wbMacro.Sheets.Count)
    wsArchivo1.Name = "Archivo1"
    
    wbBackup.Sheets(hojaBackup).Copy After:=wbMacro.Sheets(wbMacro.Sheets.Count)
    Set wsArchivo2 = wbMacro.Sheets(wbMacro.Sheets.Count)
    wsArchivo2.Name = "Archivo2"
    
    wbActual.Close SaveChanges:=False
    wbBackup.Close SaveChanges:=False
    
    '--- Limpieza profunda de "Lista de Diferencias" ---
    With wsDiferencias
        .Cells.Clear
        .Range("A1:E1").Value = Array("Celda", "Valor Archivo 1", "Valor Archivo 2", "Tipo", "Color")
        .Range("A1:E1").Font.Bold = True
        .Columns("A:E").AutoFit
    End With
    
    '--- Comparación Completa ---
    Dim rangoActual As Range, rangoBackup As Range
    Dim maxFilas As Long, maxColumnas As Long
    Dim celda As Range, celdaBackup As Range
    Dim tipoDiferencia As String
    Dim colorResaltado As Long
    Dim i As Long, j As Long
    
    Set rangoActual = wsArchivo1.UsedRange
    Set rangoBackup = wsArchivo2.UsedRange
    maxFilas = Application.Max(rangoActual.Rows.Count, rangoBackup.Rows.Count)
    maxColumnas = Application.Max(rangoActual.Columns.Count, rangoBackup.Columns.Count)
    
    For i = 1 To maxFilas
        For j = 1 To maxColumnas
            On Error Resume Next
            Set celda = rangoActual.Cells(i, j)
            Set celdaBackup = rangoBackup.Cells(i, j)
            On Error GoTo 0
            
            ' Reiniciar variables
            tipoDiferencia = ""
            colorResaltado = 0
            
            ' Caso 1: Celda existe en Archivo1 pero no en Archivo2
            If Not celda Is Nothing And celdaBackup Is Nothing Then
                tipoDiferencia = "Valor"
                colorResaltado = RGB(255, 255, 0) ' Amarillo
                celda.Interior.color = colorResaltado
                
            ' Caso 2: Celda existe en Archivo2 pero no en Archivo1
            ElseIf celda Is Nothing And Not celdaBackup Is Nothing Then
                tipoDiferencia = "Valor"
                colorResaltado = RGB(255, 255, 0) ' Amarillo
                ' Nota: No resaltamos celdaBackup porque está en otra hoja
                
            ' Caso 3: Comparar celdas que existen en ambos
            ElseIf Not celda Is Nothing And Not celdaBackup Is Nothing Then
                ' Comparar VALORES (solo si no hay fórmulas)
                If Not celda.HasFormula And Not celdaBackup.HasFormula Then
                    If CStr(celda.Value) <> CStr(celdaBackup.Value) Then
                        tipoDiferencia = "Valor"
                        colorResaltado = RGB(255, 255, 0) ' Amarillo
                    End If
                End If
                
                ' Comparar FÓRMULAS
                If celda.HasFormula Or celdaBackup.HasFormula Then
                    If celda.HasFormula <> celdaBackup.HasFormula Then
                        tipoDiferencia = "Fórmula"
                        colorResaltado = RGB(255, 192, 0) ' Naranja
                    ElseIf celda.Formula <> celdaBackup.Formula Then
                        tipoDiferencia = "Fórmula"
                        colorResaltado = RGB(255, 192, 0)
                    End If
                End If
                
                ' Comparar FORMATOS
                If celda.Interior.color <> celdaBackup.Interior.color Then
                    If tipoDiferencia = "" Then
                        tipoDiferencia = "Formato (Color Fondo)"
                        colorResaltado = RGB(255, 153, 204) ' Rosa
                    End If
                End If
                
                If celda.Font.Bold <> celdaBackup.Font.Bold Then
                    If tipoDiferencia = "" Then
                        tipoDiferencia = "Formato (Negrita)"
                        colorResaltado = RGB(153, 204, 255) ' Azul claro
                    End If
                End If
            End If
            
            ' Registrar diferencias
            If tipoDiferencia <> "" Then
                diferenciasEncontradas = True
                
                ' Resaltar en Archivo1 (si existe)
                If Not celda Is Nothing Then celda.Interior.color = colorResaltado
                
                ' Agregar a Lista de Diferencias
                With wsDiferencias
                    .Cells(filaDiferencias, 1).Value = IIf(Not celda Is Nothing, celda.Address(False, False), "N/A")
                    .Cells(filaDiferencias, 2).Value = IIf(Not celda Is Nothing, celda.Value, "")
                    .Cells(filaDiferencias, 3).Value = IIf(Not celdaBackup Is Nothing, celdaBackup.Value, "")
                    .Cells(filaDiferencias, 4).Value = tipoDiferencia
                    .Cells(filaDiferencias, 5).Interior.color = colorResaltado
                    .Cells(filaDiferencias, 5).Value = ObtenerNombreColor(colorResaltado)
                End With
                
                filaDiferencias = filaDiferencias + 1
            End If
        Next j
    Next i
    
    ' Aplicar formato final a "Lista de Diferencias"
    With wsDiferencias
        ' Alinear todo a la izquierda (columnas A a E)
        .Range("A2:E" & filaDiferencias - 1).HorizontalAlignment = xlLeft
        
        ' Autoajustar solo columnas D y E
        .Columns("D:E").AutoFit
        
        'Ajustar ancho de columna A,B,C
        .Columns("A").ColumnWidth = 10
        .Columns("B").ColumnWidth = 15
        .Columns("C").ColumnWidth = 15
    End With
    
    '--- Resultado final ---
    If diferenciasEncontradas Then
        MsgBox "Comparación completada. Se encontraron " & filaDiferencias - 2 & " diferencias.", vbInformation, titulo
    Else
        MsgBox "No se encontraron diferencias entre los archivos.", vbInformation, titulo
    End If
    
    wsDiferencias.Activate
    
Finalizar:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.DisplayAlerts = True
    Exit Sub
    
ManejarError:
    On Error Resume Next
    If Not wbActual Is Nothing Then wbActual.Close SaveChanges:=False
    If Not wbBackup Is Nothing Then wbBackup.Close SaveChanges:=False
    On Error GoTo 0
    
    MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, titulo
    Resume Finalizar
End Sub

'============================================
' FUNCIÓN AUXILIAR: ObtenerNombreColor
'============================================
Private Function ObtenerNombreColor(color As Long) As String
    Select Case color
        Case RGB(255, 255, 0): ObtenerNombreColor = "Amarillo"
        Case RGB(255, 192, 0): ObtenerNombreColor = "Naranja"
        Case RGB(255, 153, 204): ObtenerNombreColor = "Rosa"
        Case RGB(153, 204, 255): ObtenerNombreColor = "Azul claro"
        Case Else: ObtenerNombreColor = "Otro"
    End Select
End Function

' Función especial para validar hojas
Function HojaExiste(wb As Workbook, nombreHoja As String) As Boolean
    On Error Resume Next
    Dim ws As Worksheet
    Set ws = wb.Sheets(nombreHoja)
    On Error GoTo 0
    HojaExiste = Not ws Is Nothing
End Function

Descargar Archivo con la Macro para Comparar 2 Hojas Excel

Descarga el archivo completo con la macro lista para usar. Por lo tanto solo debes configurar los parámetros de los archivos a comparar y ejecuta la macro para tener las diferencias.

El archivo Excel con el código VBA macro es creado por mi, solo contiene el código mostrado y es totalmente seguro, libre de virus. Si, al abrir el libro te aparece que esta bloqueado revisa mi articulo de habilitar macro en Excel la parte de Habilitar Macros en Archivos Descargados.

Preguntas Frecuentes (FAQ)

¿Qué tipos de diferencias puede detectar la macro?

La macro detecta cambios en valores, fórmulas y formatos, como colores de fondo y negritas.

¿Funciona con archivos grandes?

Sí, pero el tiempo de procesamiento puede variar según el tamaño del archivo.

¿Qué pasa si los archivos tienen hojas con nombres diferentes?

No hay problema, los nombre de cada hoja son configurables. si se escribe incorrecto la macro mostrará un mensaje de error indicando que la hoja no fue encontrada.

¿Puedo personalizar los colores de resaltado?

Sí, puedes modificar el código VBA para cambiar los colores de resaltado según tus preferencias.

¿Por qué me da mensaje de error de archivo no encontrado?

Debes revisar la si la ruta coloca es correcta y que el archivo no este protegido.

Conclusión.

Con esta macro VBA, puedes comparar 2 hojas Excel de diferentes archivos de manera rápida, precisa y eficiente. Ya sea para auditorías, control de versiones o colaboración en equipos, esta herramienta te permitirá detectar diferencias en segundos. ¡Descarga el archivo, configura los parámetros y comienza a trabajar ahorrando tiempo.

Te Puede Interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir