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

¿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.
- ¿Para Qué Sirve la Macro para Comparar 2 Hojas Excel?
- Tipos de Cambios que Detecta la Macro
- Beneficios de Usar esta Macro
- Usos Comunes de la Macro para Comparar dos Hojas Excel
- Cómo funciona la Macro para comparar 2 hojas Excel de distintos archivos.
- Cómo Configurar y Ejecutar la Macro para comparar
- Código VBA Completo: Macro para Comparar 2 Hojas Excel
- Descargar Archivo con la Macro para Comparar 2 Hojas Excel
- Preguntas Frecuentes (FAQ)
- 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 Diferencia | Color | Ejemplo |
---|---|---|
Valores | Amarillo | 50 vs 60 |
Fórmulas | Naranja | =A1+B1 vs =A1*2 |
Formato Color de fondo | Rosa | Fondo blanco vs verde |
Formato Negritas | Azul claro | Texto normal vs negrita |
Beneficios de Usar esta Macro
Descubre por qué esta herramienta es esencial para cualquier usuario avanzado de Excel:
También puedes leer
- 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 leer
- 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.

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.

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.


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 leer
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.
Deja una respuesta
Te Puede Interesar