Comprar datos de dos libros diferentes y copiar solo un rango

Tengo dos libros con los cuales necesito hacer una comparación de datos

En el libro1 tengo esta tabla

En donde REF es un consecutivo generado automáticamente

En el libro2 esta tabla

Las hojas en los dos libros se llaman igual (Hoja1)

Lo que necesito es comparar la columna de COD en los dos archivos y el código del libro2 que no este en el libro 1 por ejemplo A1, de esa fila seleccione desde B hasta D y los pegue en el libro1 en la primera fila debajo de los títulos (B2).

2 respuestas

Respuesta
1

¿Necesitas qué sólo se pongan en el libro1 los datos del libro2 que no estén en el libro 1?

¿O también en viceversa?

Solo del libro2 al libro1 :)

Aquí adjunto una foto de las tablas antes de aplicar el código:

Y después:

Y el código:

Sub CompararLibros()
    Dim Libro2 As String
    Dim Row1, Row2, i As Integer
    Dim Flag As Boolean
    Libro2 = "Libro2.xlsx" 'pon aquí el nombre exacto del libro y la ubicación si no están en la misma carpeta
    Row1 = Cells(Rows.Count, "D").End(xlUp).Row
    With Workbooks(Libro2).Sheets("Hoja1")
        Row2 = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 2 To Row2
            If Range("D2:D" & Row1 + 1).Find(.Cells(i, "D")) Is Nothing Then
                .Range(.Cells(i, "A"), .Cells(i, "D")).Copy
                [A2].Insert Shift:=xlDown
                Application.CutCopyMode = False
                Flag = True
            End If
        Next i
        If Not Flag Then
            MsgBox "No hay diferencias"
        Else: MsgBox "Tabla actualizada"
        End If
    End With
    'For i = 2 To Row1: Cells(i, "A") = i - 1: Next i
End Sub

El último comentario es por si quieres ordenar la columna REF.

Si te fue de ayuda, no olvides puntuar.

Muchas gracias, funcionó perfecto pero quisiera hacer una nueva validación en la tabla.

Necesito que del libro2 copie los datos en donde la clumna B sea menor de 50, es decir que en este caso, copiaría solo la fila del código A3.

Sub CompararLibros()
    Dim Libro2 As String
    Dim Row1, Row2, i As Integer
    Dim Flag As Boolean
    Libro2 = "Libro2.xlsx" 'pon aquí el nombre exacto del libro y la ubicación si no están en la misma carpeta
    Row1 = Cells(Rows.Count, "D").End(xlUp).Row
    With Workbooks(Libro2).Sheets("Hoja1")
        Row2 = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 2 To Row2
            If Range("D2:D" & Row1 + 1).Find(.Cells(i, "D")) Is Nothing And .Cells(i, "B") < 50 Then
                .Range(.Cells(i, "A"), .Cells(i, "D")).Copy
                [A2].Insert Shift:=xlDown
                Application.CutCopyMode = False
                Flag = True
            End If
        Next i
        If Not Flag Then
            MsgBox "No hay diferencias"
        Else: MsgBox "Tabla actualizada"
        End If
    End With
    'For i = 2 To Row1: Cells(i, "A") = i - 1: Next i
End Sub

No olvides puntuar.

Respuesta
1

Las 2 macros funcionan correctamente... quizás solo agregaría que se debe ejecutar desde el Libro1.

Con la segunda macro se copiarán solo los cód que no estén en Hoja1 y cuya

col B  < 50. 

Si necesitas otro tipo de criterio debieras comentarlo, pero así está correcta.

Sdos.

Elsa

La macro la ejecuto desde el libro1, pero no me trae todos los datos del libro2. En realidad son varios libros los cuales tienen la columna I personalizada, por ejemplo en un libro está columna es LOG-18-001, en otro es DIM-18-001 pero me trae el 001 del primero e ignora el 001 del segundo y si vuelvo a ejecutar la macro, me repite los datos que ya estaban. No sé cómo solucionarlo y lo necesito super urgente.

Entonces dejale una imagen 'real' a Marsiglia que te desarrolló las macros siguiendo tu ejemplo y tus notas... Ahora mencionas algo de la col I y creo que nos estamos confundiendo todos ;)

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas