Trucos Excel. Unir varios Excel en uno
Septiembre 21st, 2011 | por rvaquerizo |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:

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.
Etiquetas: , macros, unir excel, visual basic

30 Respuestas en “Trucos Excel. Unir varios Excel en uno”
Por Fernando, Nov 8, 2011 | Responder
Duda: hay alguna forma de solucionar el error que esta marcando excel 2010?
Por ANdres, Nov 29, 2011 | Responder
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.
Por rvaquerizo, Dic 2, 2011 | Responder
Hola, ¿en qué parte de la macro falla?
Por Alba, Dic 9, 2011 | Responder
Muchisimas gracias, me ha servido mucho. Muy buen macro.
Por Alberto, Ene 23, 2012 | Responder
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
Por JIM, Mar 21, 2012 | Responder
falla la macro en excel 2010 en:
XL.Workbooks.Open libro
Por Joan, Ago 11, 2012 | Responder
Muchas gracias. Sí que sería muy interesante que la hoja tomase el nombre del libro.
Por jorgeebb, Ago 13, 2012 | Responder
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
Por jorgeebb, Ago 13, 2012 | Responder
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
Por Angel, Ago 20, 2012 | Responder
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
Por rvaquerizo, Ago 21, 2012 | Responder
Hola Angel, no habría ningún problema. El ejemplo está preparado para hacerlo sobre una misma carpeta pero no tendrías problemas si asignaras a distintas carpetas.
Por Joanba, Sep 5, 2012 | Responder
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
Por Fedeche, Sep 5, 2012 | Responder
Fantástica la macro. Me acabas de ahorrar horas/dias de trabajo.
No te beso por que no te tengo a mano.
Gracias.
Por rvaquerizo, Sep 6, 2012 | Responder
Joanba, por petición popular creo que me toca hacer una macro que haga lo que tú comentas.
Fedeche, se agradecen los agradecimientos. Lo de los besos…
Por Ester, Oct 16, 2012 | Responder
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
Por rvaquerizo, Oct 16, 2012 | Responder
Esther, por petición popular haré la macro. Busca en el blog porque un compañero mandó una versión muy mejorada.
Por Mónica, Oct 23, 2012 | Responder
Buenísima entrada. Funciona muy bien. Gracias!
Por ricvarg, Nov 14, 2012 | Responder
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?
Por rvaquerizo, Nov 15, 2012 | Responder
Hola, debería de funcionar. Buena pregunta. Tengo que probarlo. Saludos.
Por LU, Nov 15, 2012 | Responder
Hola: al jecutar la macro me manda un error en está parte XL.Workbooks.Open libro
en office 2007 me pueden ayudar please ??
Por rvaquerizo, Nov 16, 2012 | Responder
Ese error es debido a que no tienes ningún libro que abrir. Tienes que indicarle al programa que libros son los que hay que unir.
Por Michel, Dic 1, 2012 | Responder
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 :)
Por bun, Dic 6, 2012 | Responder
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.
Por valeria, Ene 9, 2013 | Responder
como puedo hacer una carpeta con las hojas en excel k no haga tantas
Por Manolo, Ene 18, 2013 | Responder
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?
Por rvaquerizo, Ene 21, 2013 | Responder
Manolo, no funciona el bucle que pone la posición, ejecuta por pasos y mira el valor que toma el índice i.
Por DIOS, Feb 5, 2013 | Responder
TPM ESTA FENOMENAL!
Por George, Mar 17, 2013 | Responder
Buenisimo aporte lo probe y me funciono rebien..gracias.
Por sassili, Abr 12, 2013 | Responder
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?
Por javier, Abr 23, 2013 | Responder
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??