Supongo que te refieres a Tablas que contienen un rango de celdas, si es así, entonces debes tener algo como esto:
El resultado quedará en otra hoja, de la siguiente manera:
Cambia en la macro "Hoja3" por el nombre de tu hoja que va a tener el resultado.
También cambia "TABLA_A" y "TABLA_B" por los nombres de tus tablas.
Pon todo el siguiente código en un módulo. La macro que debes ejecutar es la que se llama: Comparar_Tablas
Sub Comparar_Tablas()
'Por Dante Amor
Set h3 = Sheets("Hoja3")
Set ta = Range("TABLA_A")
Set tb = Range("TABLA_B")
'
h3.Rows("2:" & Rows.Count).ClearContents
For Each dato In ta.Cells(1, 1).Resize(ta.Rows.Count)
Set b = tb.Find(dato.Value, lookat:=xlWhole)
If Not b Is Nothing Then
Call Poner_Registro(h3, dato, 1, "")
'Buscar diferencias
If dato.Offset(0, 1).Value <> b.Offset(0, 1).Value Or _
dato.Offset(0, 2).Value <> b.Offset(0, 2).Value Then
Call Poner_Registro(h3, dato, 17, ta.ListObject.Name)
Call Poner_Registro(h3, b, 17, tb.ListObject.Name)
End If
Else
Call Poner_Registro(h3, dato, 5, "")
End If
Next
'
For Each dato In tb.Cells(1, 1).Resize(tb.Rows.Count)
Set b = ta.Find(dato.Value, lookat:=xlWhole)
If Not b Is Nothing Then
Call Poner_Registro(h3, dato, 9, "")
Else
Call Poner_Registro(h3, dato, 13, "")
End If
Next
'
MsgBox "Fin"
End Sub
'
Sub Poner_Registro(h3, dato, col, tabla)
'Por Dante Amor
fila = h3.Cells(Rows.Count, col).End(xlUp).Row + 1
h3.Cells(fila, col).Value = dato.Value
h3.Cells(fila, col + 1).Value = dato.Offset(0, 1)
h3.Cells(fila, col + 2).Value = dato.Offset(0, 2)
h3.Cells(fila, col + 3).Value = tabla
End Sub
Nota: El resultado quedará en celdas, no quedará en Tablas.
'.[Sal u dos. Dante Amor. No olvides valorar la respuesta.
'.[Avísame cualquier duda