Trucos Excel. Unir varios Excel en uno

21 Sep

Tenía pendiente revisar una de las entradas más visitadas del blog. Trata la problemática de unir varios Excel en uno sólo. En el caso concreto servía para unir varios Excel generados por SAS a través de una macro en SAS. En la entrada de hoy quiero trabajar con un ejemplo que os podéis descargar aquí en formato rar. De los archivos que comparto el más interesante el que llamamos unir_varios_excel.xlsm  se trata de un archivo Excel para macros que contiene un par de macros más que interesantes. Un pantallazo de este libro de Excel:

unir_excel.png

Tiene una macro  limpia para limpiar la colunma de archivos. Una macro ficheros que se llama con el botón Listar Libros y nos permite listar los ficheros de un determinado directorio con una determinada extensión. Estos parámetros los podemos modificar en las casillas C1 y C2. Se trata de una macro que ya hemos visto con anterioridad por lo que no entraremos en profundidad con ella. La macro más interesante es la que he llamado Une y será la que nos permita unir la primera hoja de todos los excel de un directorio en un libro final cuyo nombre le indicamos en la celda C3. Este libro final se guardará en el mismo directorio donde están todos los archivos Excel que deseamos unir. Por supuesto es importante tener todos los Excel en el mismo directorio, el unir_varios_excel no es necesario que esté en ese directorio. El contenido de esta macro os le muestro y resumo a continuación:


Sub Une()
Dim nombre, libro, nombre_final, libro_final As String
'Objeto Excel
Set XL = CreateObject("Excel.Application")
XL.Visible = True
para = 0
i = 0
'Creamos el libro resultante
nombre_final = Cells(3, 3) & "." & Cells(2, 3)
libro_final = Cells(1, 3) & "\" & nombre_final

While (para = 0)
nombre = Cells(5 + i, 1)
libro = Cells(1, 3) & "\" & nombre

If nombre <> "" Then
XL.Workbooks.Open libro
If i = 0 Then XL.ActiveWorkbook.SaveAs libro_final, -4143
If i <> 0 Then
XL.Workbooks.Open libro
XL.Workbooks(nombre).Sheets(1).Copy , XL.Workbooks(nombre_final).Sheets(i)
XL.Workbooks(nombre).Close
End If
i = i + 1
End If
If nombre = "" Then
para = 1
XL.Workbooks(nombre_final).Close True
End If
Wend

XL.Quit
End Sub

Creamos un objeto XL como aplicación de Excel. Y sobre un Excel que llamamos como nombre_final vamos a hacer un bucle donde la primera iteración será crear ese archivo nombre_final a partir del primero de los Excel que deseamos unir. En las sucesivas iteraciones del bucle seleccionaremos la primera hoja de los libros que queremos unir y se la pegamos a las hojas de nuestro archivo resultante. Tampoco es un bucle complicado o especialmente talentoso, si os plantea alguna duda escribid un comentario.  Al final se cierra nuestro resultado y el objeto Excel con el que trabajamos.

Al ser esta una primera versión que espero vaya mejorando por mi parte y por parte de las personas que deseen colaborar tiene algunas limitaciones:

  • Sólo une la primera hoja de los libros que deseamos unir
  • Cuando el Excel resultante ya está creado nos pide si deseamos sobreescribirlo
  • He detectado un problema en Excel 2010 con el resultado cuando tratamos de guardarlo como xlsx

Poco a poco iremos puliendo estos defectos y seguramente podamos crear una aplicación en VB para unir archivos Excel más completa. Espero que os sea de utilidad, un saludo.

56 respuestas a «Trucos Excel. Unir varios Excel en uno»

  1. Hola, Tengo varioas archivo y los quierea unir en un solo archivo, Cuando hago una macro sencilla par aunir estso archivos, como son archivo que varia en el nuemro de celda, cuadno vuelvo a correr la macro la iformacion se sobrepone! En si si en al macro aparace range a1:a100 pero despues cambia de a1:a150 cuando la otra parte del arhivo se pega se pega desda la a100 y no desde la a150, como puedo resolver este problema?
    Gracias.

  2. Funciona bien
    Yo sugeriría añadir un botón que permita que las pestañas de los nuevos datos tomaran el nombre del archivo del que provienen en lugar del nombre de la pestaña original, ya que al menos en mi caso los datos vienen diferenciados en el nombre de archivo, y en la primera pestaña ponen lo mismo (son datos del mismo tipo)
    Un saludo

  3. buenas, este me funciona muy bien pero tengo un problema, resulta que mis libros con bastante grandes y el macro no me deja despues de cierta cantidad de casillas exportar el resto pues lo toma como excel 2003 y yo lo necesito en excel 2007 o 2010

  4. Presenta el siguiente error:
    ESTE LIBRO CONTIENE DATOS EN CELDAS QUE ESTAN FUERA DEL LIMITE DE FILAS Y COLUMNAS DEL FORMATO DE ARCHIVO SELECCIONADO. LOS DATOS QUE OCUPEN MAS DE 256 (IV) COLIMNAS POR 65.536 FILAS NO SE GUARDARAN
    Como se puede solucionar esto gracias

  5. hola, soy principiante en todo esto. solo queria saber si se prodrian unir las excel desde varias computadoras de una misma red local o habria algun problema?
    gracias anticipadas

  6. Muy buena la macro, de todas maneras quiero unir varios ficheros en uno, este me crea una pestaña por cada libro ¿?, es así como finicona o hago algo mal?

    Felicidades y saludos
    Joan

  7. La Macro funciona genial, pero yo necesitaria tambien lo que comenaba Joanba, todo el contenido unido en un unico libro. Si hay algo disponible agradeceria que me avisarais.

    Muchas gracias

  8. en mi caso cada libro excel es en realidad un archivo .csv abierto como libro excel….
    ¿funciona igual si le indico que la extensión es csv en vez de xls?

  9. Genial la macro rvaquerizo, me fui muy útil, muchas gracias de verdad :) por cierto, al generarse el fichero todos_unidos, como se puede generar para que cada hoja adapte el nombre de su fichero?
    muchas gracias :)

  10. Hola.
    Sus funciones me son muy útiles, les agradezco.
    Una consulta, ¿cómo hacer para que los datos que jala de cada archivo de origen se peguen en una misma hoja en archivo de destino, unos a continuación de los anteriores, y no en hojas diferentes? Y de paso, ¿cómo copiar sólo determinadas celdas y no toda la hoja?
    Sé que pido mucho, ojalá me puedan ayudar.

  11. Buenas noches y gracias anticipadas por la generosidad de compartir conocimientos y dedicación.
    No consigo que funcione bien, parece que abre y copia todas y cada una de las hojas del ejemplo pero una encima de la otra con lo que al final solo están los datos de la tercera hoja. ¿Que es lo que he hecho mal?

  12. Buenas tardes.
    En mi caso necesito juntar varios archivos en uno. pero los archivos que quiero juntar varían cada día (cada día tiene mas datos, también varia en numero de filas por archivo. ¿de algún modo la macro puede detectar la ultima fila con datos y pegar el siguiente archivo en la ultima fila vacia?

  13. Tengo dos archivos en diferentes libros de excel, al momento de copiar y pedar se desconfigura el formato como puedo hacer un solo libro, aunque sea en diferentes pestñas pero guardando el formato??

  14. al ejecutar la macro hay un error run time aqui:
    If i = 0 Then XL.ActiveWorkbook.SaveAs libro_final, -4143

    me podeis dar una solucion?
    Gracias

  15. Repito una pregunta de un usuario por si pudiera tener respuesta ¿cómo hacer para que los datos que extrae de cada archivo de origen se peguen en una misma hoja en archivo de destino, unos a continuación de los anteriores, y no en hojas diferentes?

  16. debes colocar la ruta donde estan los archivos que vas a unir ejemplo «C:\Documents and Settings\Administrador\Escritorio\unir_excel»

  17. No me funciona dice que falla en listar ficheros: fichero = Dir(directorio, vbDirectory)
    Y en unir:
    XL.Workbooks(nombre_final).Close True

    Helpp!!!!!

  18. Buen Dia, rvaquerizo

    Muy buena Macro, me ha sido de gran ayuda en mi trabajo. Queria saber como puedo hacer que un titulo digitado en el archivo Unir, sea colocado en la respectiva hoja en el archivo nuevo

    Archivos Archivos seleccionados TITULO HOJA
    importe1.xlsx ENERO
    importe2.xlsx FEBRERO
    importe3.xlsx MARZO

    agradezco cualquier ayuda que me puedan brindar

  19. Hola, me gustaría saber cómo copiar la misma celda («B3») de muchos libros en una columna al costado izquierdo de una tabla que ya se extrajo (Columna A), con la macro que coloco luego. El proceso que quiero es este:
    *Se abra el archivo 1 de n que existen en una carpeta.
    *Se copia la tabla (eso está listo en la macro que encontré).
    *Se copie la celda B3 en la columna «A» hasta que no hayan más datos en la tabla que empieza en la columna «B»
    *Se cierre el archivo y abra el siguiente haciendo el mismo proceso.

    «»Sub ponernombre()
    ‘Por.DAM
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(«concentrado»)
    h1.Cells.Clear
    Application.ScreenUpdating = False
    Set nav = CreateObject(«shell.application»)
    carp = nav.browseforfolder(0, «SELECCIONA CARPETA», 0, «C:\trabajo»).items.Item.Path
    If carp = «» Then Exit Sub
    carp = carp & «\»
    ChDir carp
    archi = Dir(«*.xls*»)
    Do While archi «»
    Workbooks.Open archi
    uf = ActiveCell.SpecialCells(xlLastCell).Row
    uc = ActiveCell.SpecialCells(xlLastCell).Column
    u = h1.Range(«A1»).SpecialCells(xlLastCell).Row + 1
    Range(Cells(6, 1), Cells(uf, uc)).Copy h1.Range(«B» & u)
    ActiveWorkbook.Close
    archi = Dir()
    Loop
    MsgBox «Archivos concentrados», vbInformation, «UNIR ARCHIVOS EN UNA HOJA»
    End Sub»»

  20. Hola, tengo un par de dudas sobre unas modificaciones que me interesan de la macro:

    – Quería sólo copiar la tercera pestaña de cada Excel de origen.
    – Mis archivos de origen son .xlsm y me da un error en el archivo de salida.

    Me podríais ayudar con esto?
    Muchas gracias!

  21. Excelente muy buen trabajo !!!!!

    Para la personas que tienen inconvenientes, deben colocar el archivo «unir_varios_excel.xlsm» en la misma carpeta donde se encuentres lo archivos a unir, la extensión no me presento problemas en mi caso eran archivos .csv y lo unifico sin inconvenientes.

    Gracias.

  22. al ejecutar la macro me da el siguiente error:
    se ha producido el error ‘1004’ en tiempo de ejecución:
    excel no puede inserta las hojas en el libro de destino porque éste contiene menos filas y columnas que el libro de origen. Para mover o copiar los datos al libro destino, selecciones los datos y, a continuación, utilizar los comandos copiar y pegar para insertarlos en las hojas de otro libro

    por favor si me pueden ilustrar con este error

    gracias

  23. Hola,

    A mi también me da error en
    XL.Workbooks.Open libro
    ¿aún no se sabe por que? Sería un puntazo… me ahorraría mucho trabajo…
    Gracias!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *