Buenas tardes como están... Tengo una macro que compara diferencias entre 2 hojas

La macro compara las diferencias entre las 2 hojas y copia las diferencia en una tercera. Y trabaja bien con 30 o 40 lineas pero necesito que compare unas 900 o 1000 lineas, Otra cosa esta macro tiene una hoja ( hoja 1 como master) y importa datos de otra hoja.

La Utilizo para habilitar al personal que se encuentra asistente... Aquí les dejo el código...

Option Explicit
Dim fila1 As Integer, fila2 As Integer
Dim marcador As Integer
Dim i
Sub compara()
fila1 = 2
fila2 = 2
'esta recorre la hoja1
While Sheets(1).Cells(fila1, 1) <> ""
'esta recorre la hoja2
While Sheets(2).Cells(fila2, 1).Value <> "" And marcador = 0
'compara las 8 col o más
If Hoja1.Cells(fila1, 1) = Hoja2.Cells(fila2, 1) Then
'R = MsgBox("La asistencia que va a cargar no corresponde al día de hoy, ¿Desea Continuar?", vbYesNo, "FECHA DE CARGA")
'en tu caso pintará la fila activa de hoja1, ajustá el nro de color
Sheets(1).Cells(fila1, 1).EntireRow.Interior.ColorIndex = 3
marcador = 1
Else
fila2 = fila2 + 1
End If
Wend
fila1 = fila1 + 1
fila2 = 2 'indica la primer fila de la hoja2
marcador = 0
Wend
color
End Sub
Sub color()
'--Copiaremos todas las celdas que no tienen color a la hoja3
Dim k, k1, k3 As Integer
Hoja1.Select
Range("A2").Select
k1 = ActiveCell.Row
For i = 2 To 1000
Sheets(1).Select
If Range("A" & k1).Interior.ColorIndex <> 3 Then
Rows(k1).Select
Selection.Copy
Sheets(3).Select
k3 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Rows(k3).Select
ActiveSheet.Paste
End If
k1 = k1 + 1
Next i
Limpiar
End Sub
Sub Limpiar()
Hoja1.Select
Rows("2:1000").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A1").Select
End Sub

1 respuesta

Respuesta
1

Lo qué hace la macro es comparar la columna A de la hoja1 con la columna A de la hoja2 y si el dato de la hoja1 no está en la hoja2 copia toda la fila de la hoja1 en la hoja3?

Si es afirmativa tu respuesta realizo una nueva macro y te la envío.

Utiliza esta macro, te compara todas las filas de la columna A de la hoja1 en todas las filas de la columna A de la hoja2.

Sub compara()
'Por.DAM
For i = 2 To Hoja1.Range("A" & Rows.Count).End(xlUp).Row
  Set b = Hoja2.Columns("A").Find(Hoja1.Cells(i, "A"), LookAt:=xlWhole)
  If b Is Nothing Then _
    Hoja1.Rows(i).Copy Hoja3.Range("A" & Hoja3.Range("A" & Rows.Count).End(xlUp).Row + 1)
Next
End Sub

Saludos. Dante Amor
No olvides finalizar la pregunta.

Hola buenas tardes... gracia de ante mano.. ahorita estoy haciendo las pruebas... pero me gustaría pasarte una copia del archivo completo a ver si podría evaluar correctamente la macro y ver las diferencias de las hojas...

si tiene algún correo.. se lo agradecería mucho...

¿No entiendo lo de evaluar la macro?

Haz una prueba con pocos datos, para que revises que efectivamente te pone en la hoja3 las diferencias y luego lo pruebas con todos tus datos.

Te explico tengo " hojas una master que no es modificable y otra a la que se le importan unos archivos... la idea es que la macro comprare ambas hojas pero que copie en una tercera hoja solo los datos de las personas que no aparezcan en la hoja importada. ya que esa hoja es de inasistencias. entonces tendría que comparar y filtrar a los inasistentes y solo mostrar los asistentes... :-)

Eso hace la macro.

Lo que hice fue replicar lo que hace tu macro.

No entiendo cuál es el problema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas