Combinar el contenido de dos archivos de Excel comparando las 4 primeras celdas de cada fila para que no se repitan.

Tengo dos archivos similares de Excel y necesito combinar el contenido de ambos sin que se repitan las filas o registros comparando las primeras 4 celdas de cada fila y guardar el contenido en un libro nuevo.

1 Respuesta

Respuesta
1

Te anexo una macro.

Antes de ejecutar la macro debes actualizar los nombres de tus libros y de tus hojas en esta parte de la macro:

    Set l0 = ThisWorkbook               'libro con la macro
    Set l1 = Workbooks("Libro_1.xlsx")  'libro 1 debe estar abierto
    Set l2 = Workbooks("Libro_2.xlsx")  'libro 2 debe estar abierto
    '
    Set h0 = l0.Sheets("hoja_destino")  'hoja destino dentro del libro con la macro
    Set h1 = l1.Sheets("Hoja1")         'hoja origen del libro1
    Set h2 = l2.Sheets("Hoja1")         'hoja origen del libro2
    fini = 2                            'fila inicial de las hojas origen

En un libro debes crear una hoja llamada "hoja_destino", en ese mismo libro debes poner la macro:

Sub Nuevo_Libro()
'Por Dante Amor
    Application.ScreenUpdating = False
    Set l0 = ThisWorkbook               'libro con la macro
    Set l1 = Workbooks("Libro_1.xlsx")  'libro 1 debe estar abierto
    Set l2 = Workbooks("Libro_2.xlsx")  'libro 2 debe estar abierto
    '
    Set h0 = l0.Sheets("hoja_destino")  'hoja destino dentro del libro con la macro
    Set h1 = l1.Sheets("Hoja1")         'hoja origen del libro1
    Set h2 = l2.Sheets("Hoja1")         'hoja origen del libro2
    fini = 2                            'fila inicial de las hojas origen
    '
    h0.Cells.ClearContents
    u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
    h1.Rows(fini & ":" & u1).Copy h0.Range("A2")
    u0 = h0.Range("A" & Rows.Count).End(xlUp).Row + 1
    h2.Rows(fini & ":" & u2).Copy h0.Range("A" & u0)
    '
    uc = h1.UsedRange.Columns(h1.UsedRange.Columns.Count).Column + 2
    u0 = h0.Range("A" & Rows.Count).End(xlUp).Row
    With h0.Range(h0.Cells(2, uc), h0.Cells(u0, uc))
        .FormulaR1C1 = "=RC1&RC2&RC3&RC4"
        .Value = .Value
    End With
    '
    With h0.Range(h0.Cells(2, uc + 1), h0.Cells(u0, uc + 1))
        .FormulaR1C1 = "=COUNTIF(R2C" & uc & ":R" & u0 & "C" & uc & ",RC[-1])"
    End With
    h0.Range("A1", h0.Cells(u0, uc + 1)).AutoFilter Field:=uc + 1, Criteria1:="1"
    Set l3 = Workbooks.Add
    Set h3 = l3.Sheets(1)
    h0.Range("A1", h0.Cells(u0, uc - 2)).Copy h3.Range("A1")
    '
    MsgBox "Fin"
End Sub

Importante:

Los dos libros a combinar deberán estar abiertos.


Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Nuevo_Libro
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Al finalizar la macro te creará un nuevo libro con los registros únicos de ambos libros.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

¡Gracias!; Agradezco tu tiempo por el código de la macro que me compartiste, la he probado y funciona muy bien, hace lo que necesito. Saludos!.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas