Macro para unir varios libros Excel en uno solo, con cierta condición

Hola Estimados Expertos:

Tengo varios libros excel los cuales no cambian las posiciones en las celdas, el tema es que quiero unir un solo archivo en plantilla para poder generar etiquetas en una impresora Zebra.

1.- Adjunto imagen con la información que contiene mis libros.

La condición es que al consolidar los libros, quiero que el numero de documentos resaltado en "B8", reemplace al costo unitario de "F12", y asi sucesivamente por cada libro que se vaya consolidando. Solo ese dato de necesito que pase a partir de F12.

Los Libros a unir pueden tener una fila de datos a partir de "A12", o mas de 1, es variable

la idea que el numero de documento de B8 vaya reemplazando al costo unitario y se copie a partir de "F12"

Al final la idea es que el consolidado vaya quedando de esta manera, donde los documentos reemplazan a costo unitario.

Cada libro a unir esta con el nombre del número de la factura.

Espero se entienda mi idea y sea factible si una macro puede hacer este trabajo, que lo hago manual en el día a día, es decir copiar y pegar cada registro.

A la espera de sus sugerencias.

Muchas gracias.

Juan Arenas.

1 respuesta

Respuesta
2

No entendí muy bien, tengo las siguientes dudas:

1. ¿Tienes un archivo consolidado?

2. ¿Supongo qué el consolidado es el que tienes en las imágenes?

3. ¿El archivo consolidado es el que va a contener la macro?

4. ¿La macro quieres que lea todos los archivos que están en una carpeta?

5. ¿Qué información de cada libro quieres que se pase al consolidado? Puedes poner una imagen de lo que hay en el consolidado, ¿qué datos voy a tomar?

Si no estoy entendiendo lo que necesitas, entonces puedes empezar de nuevo.

Dices:

" Quiero que el numero de documentos resaltado en "B8", reemplace al costo unitario de "F12""

Pero no entendí, si eso se va a hacer en el consolidado o en cada libro, ¿o cómo?

Estimado Dante:

Te detallo la idea y dudas:

Te adjunto 3 fotos:

La primera, con la información que contiene cada libro a unir. La segunda, mi plantilla sin datos que contendrá la macro.Por último, como queda la misma consolidada.

Lo resaltado en amarillo en el foto1 de ejemplo, es lo que que tiene que pasar a mi plantilla macro (No varían las direcciones de celda), La única condición que necesito que se cumpla al consolidar todos los libros en un solo archivo es lo resaltado en rojo en la celda "B8", En cada libro a unir esta ese número de factura en esa dirección de celda, quiero que ese numero de factura primero se copie a partir de la celda "F12" de cada libro reemplazando al costo unitario, luego de esa acción me los una en mi plantilla macro. Foto 3 (Plantilla Consolidada)

Foto 1: Información que tiene cada libro a unir.

Foto 2 (Plantilla vacía)

Foto 3: Plantilla con los datos consolidados.

Ojala se entienda la idea.

Si necesitas que te envíe la plantilla manual a tu correo, y los libros excel a unir a un correo, me avisas por favor.

Gracias de antemano por tu atención.

Slds.

Juan.

Desafortunadamente tu ejemplo no es claro, en la imagen 1, tienes el documento:

040-00013570 y en tu imagen3 "consolidado" no aparece este documento. Supongo que se debe copiar, pero la explicación hubiera sido más clara si los ejemplos fueran congruentes.

Suponiendo entonces que se debe copiar. Me queda claro, que los datos de un archivoX, desde la fila 12 y hacia abajo, se van a copiar a la "planilla vacía"; y se van a pegar a partir de la fila 12. ¿Correcto?

Ahora, si la "planilla vacía" es la que va a consolidar, ¿qué datos se deben poner en la "planilla vacía" celdas B4 a B9? Si son varios archivos, cuál de todos esos archivos se toma la información, para ponerla en las celdas B4 a B9, según tu imagen, cuando la "planilla vacía" tiene los datos consolidados, aparecen unos datos en las celdas B4 a B9.

Hola Dante:

Si disculpa, debí copiar una foto con el mismo numero de factura allí la es una confusión.

Te explico:

1.- Cada archivo POR, tienen la misma estructura, en la celda "B8", tiene un numero de factura. Ejm 040-00013570.(Solo ese dato me interesa de la cabecera) en la fila 12 tiene más datos. Se requiere lo siguiente:

  • El dato de "B8" (Ejm. 040-00013570), se copie a partir de F12 para cada archivo POR, lo que se requiere es reemplazar el costo unitario por la factura.
  • Te explico que es lo que hago manualmente, por ejemplo si tengo 10 archivos voy uno por uno y copio la factura de "B8" y la pego a partir de "F12", reemplazo el costo unitario, eso hago en cada archivo. Una vez que ya copie la factura en mis 10 archivos, agarro mi plantilla, voy a cada archivox y selecciono a partir de la fila 12 y voy pegando a mi planilla, es decir voy seleccionando de "A12 a F12" y así voy copiando uno por uno hasta tener un solo libro consolidado. La cantidad de datos de cada archivo puede variar, pueden ser n datos a partir de la fila 12.

Quisiera saber si una macro puede hacer eso, primero copiar la factura de B8 a cada archivo, para luego copiar los datos de la fila 12 a mi planilla que tiene la misma estructura de cada archivo.

Foto1: Archivo POR sin copiar la factura.

Foto 2:

Archivo POR : Copiando la factura y reemplazando el costo unitario.

Foto3: Plantilla de mis datos

Estimado ojala se entienda mi idea.

Atentamente.

Juan A.

Pon la siguiente macro en tu archivo "planilla".

Pon el archivo en la misma carpeta donde tienes todos tus archivosX.

Te recuerdo que la macro cambia en cada archivo el dato de la columna F por el número de documento y vuelve a guardar cada archivo. Si no quieres que se guarde el archivoX, entonces quita esta línea de la macro:

L2. Save


Ejecuta la macro sobre la hoja1 de tu archivo "planilla".

La macro leerá todos los archivos que tengas en esa carpeta y realizará el procedimiento. La macro lo realizará sobre la primera hoja de cada archivo.

Sub UnirLibros()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(1)
    ruta = l1.Path & "\"
    ChDir ruta
    archi = Dir(ruta & "*.xls*")
    Do While archi <> ""
        If archi <> l1.Name Then
            Set l2 = Workbooks.Open(ruta & archi)
            Set h2 = l2.Sheets(1)
            u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
            If u2 < 12 Then u2 = 12
            h2.Range("F12:F" & u2) = h2.[B8]
            u1 = h1.Range("A" & Rows.Count).End(xlUp).Row + 1
            If u1 < 12 Then u1 = 12
            h2.Range("A12:F" & u2).Copy
            h1.Range("A" & u1).PasteSpecial Paste:=xlValues
            l2.Save
            l2.Close
        End If
        archi = Dir()
    Loop
End Sub

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas