Copiar y pegar entre dos libros de excel

Tengo un libro de excel que es enviado el 1 de cada mes con algunos registros (puede ser 5, 10 o 20 etc) a los 3 o 4 días me envían el mismo archivo con los registros antiguos mas los nuevos registros (si el primer libro era 20, el segundo libro tiene los mismos 20 mas los registros nuevos pueden ser 20, 50 o 200 etc) por lo que se me hace muy engorroso estar buscando los nuevos registros y copiando lo al primer libro de excel, quien me ayuda con una macro que me haga ese proceso, esta es la estructura del libro:

1 respuesta

Respuesta
1

H o l a CRISTIAN CAMILO CASTAÑEDA BURGOS, bienvenido TodoExpertos.

Puedes describir brevemente cómo identificas cuáles son nuevos y cuáles son antiguos.

Si es posible Explica con un ejemplo real o con imágenes.

¡Gracias! 

Siempre me toca revisar los registros uno a uno porque no hay un patrón definido, mire las imágenes adjuntas donde la imagen "primer libro" son 58 registros, pero la imagen "segundo libro" el ultimo registro del libro uno esta en la fila 59 se agrego un registro antes y la imagen "segundo libro 2" esta el total de registros para este caso se agregaron 34 registros, las columnas que siempre envía en los libros de excel son: columna A, B, C, D, E, F y J; yo diligencio las columnas G, H, I, K. 

Lo quiero agregar siempre al primer libro porque lo voy a subir al DRIVE y la idea es que este libro se actualice y lo podamos trabajar entre varios.

Podemos considerar como patrón todos los datos de las columnas A, B, C, D, E, F y J, es decir, reviso fila por fila del archivo2 en el archivo1, pero todas las columnas, si ya existe un registro con los mismos datos, entonces no lo agrego, si un dato no es igual, entonces lo agrego.

¿Qué opinas?

Excelente

Me parece buena idea, recuerda que el archivo 1 va hacer el que consolide todos los registros.

Muchas gracias por su ayuda

Si es posible ejecutar una macro así como lo plantea

Prueba la siguiente:

Sub Copiar_Datos()
  'DECLARACIÓN de variables
  Dim sh1 As Worksheet, sh2 As Worksheet, dic As Object
  Dim a As Variant, b As Variant, c As Variant
  Dim i As Long, j As Long, k As Long
  'ENTRADAS
  Set sh1 = Workbooks("Libro1").Sheets(1)
  Set sh2 = Workbooks("Libro2").Sheets(1)
  Set dic = CreateObject("Scripting.Dictionary")
  dic.comparemode = vbTextCompare
  a = sh1.Range("A2:J" & sh1.Range("A" & Rows.Count).End(3).Row)
  b = sh2.Range("A2:J" & sh2.Range("A" & Rows.Count).End(3).Row)
  ReDim c(1 To UBound(b, 1), 1 To 10)
  For i = 1 To UBound(a)
    dic(a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3) & "|" & _
        a(i, 4) & "|" & a(i, 5) & "|" & a(i, 6) & "|" & a(i, 10)) = Empty
  Next
  'PROCESO
  For i = 2 To UBound(b)
    If Not dic.exists(b(i, 1) & "|" & b(i, 2) & "|" & b(i, 3) & "|" & _
           b(i, 4) & "|" & b(i, 5) & "|" & b(i, 6) & "|" & b(i, 10)) Then
      k = k + 1
      For j = 1 To 10
        c(k, j) = b(i, j)
      Next
    End If
  Next
  'SALIDA
  If k > 0 Then sh1.Range("A" & Rows.Count).End(3)(2).Resize(k, 10).Value = c
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas