En esta web ya llevo varios post dedicados al tema de agrupar o consolidar información en Excel, desde agrupar la información de varios archivos a una misma hoja a consolidar la información de todas las pestañas, estos son los post relacionados:
1 – CONSOLIDAR HOJAS DE UN LIBRO CON UNA CONSULTA SQL DE UNIÓN
2 – CONSOLIDAR INFORMACIÓN DE VARIOS ARCHIVOS EN UNA HOJA EXCEL
3 – CONSOLIDAR INFORMACIÓN DE VARIOS ARCHIVOS EN UNA HOJA EXCEL CON VBA
Y con este post de hoy creo que este tema quedará bastante documentado. Hace unos días, me solicitaron realizar una modificación en la macro del tercer post de la lista que acabo de comentar. La solicitud era que se pudiesen seleccionar los archivos que queremos agrupar en lugar de seleccionar una carpeta para agrupar todo el contenido. Aunque parezca un tema menor creo que es necesario comentar estas modificaciones.
El razón de realizar el post con la carpeta como fuente de los datos, fue por dos motivos: No hay muchas macros publicadas que lo hagan así y por otra parte, en procesos automatizados, es una solución más eficiente que tener que ir seleccionando los archivos. Pero, claro, se puede dar el caso que la información, precisamente, necesite ser agrupada seleccionando individualmente cada archivo que queremos agrupar.
Aprovecharé los archivos del post motivo de la consulta e introduciré algunos cambios en la programación.
Como siempre, imaginad que tenemos la siguiente carpeta con estos 3 archivos y queremos consolidar o agrupar toda la información en una hoja:
Para hacerlo vamos a utilizar la siguiente macro:
Sub AGRUPAR_ARCHIVOS()
'Definimos variables
Dim i As Integer, j As Integer, FilaInicio As Integer
Dim iArchivo As String, nArchivo As String, MiLibro As String
Dim dir_Archivo As Variant
Dim iRango As Range, dRango As Range
Dim Hoja_Destino As Worksheet, iLibro As Workbook
'Creamos ventana de diálogo para seleccionar los archivos que queremos agrupar
On Error Resume Next
dir_Archivo = Application.GetOpenFilename(Title:="SELECCIONA ARCHIVOS PARA CONSOLIDAR", MultiSelect:=True, filefilter:="Excel files (*.xls*), *.xls*")
On Error GoTo 0
'Si no seleccionamos archivos, salimos del proceso
If Not IsArray(dir_Archivo) Then
Exit Sub
End If
'Si existen datos en la hoja AGRUPADO, los eliminamos
With ThisWorkbook.Sheets("AGRUPADO")
elimina = Application.CountA(.Range("A:A")) + 1
If elimina > 0 Then .Range("A1:A" & elimina).EntireRow.Delete
End With
'Iniciamos un for con para identificar los archivos seleccionados
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
nArchivo = dir_Archivo(j)
'Determinamos a partir de que fila vamos a consolidar los datos
FilaInicio = 1
'Desactivamos actualizacion de pantalla y eventos
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Identificamos el nombre de nuestro libro
MiLibro = ThisWorkbook.Name
'Indicamos la hoja de destino de los datos que queremos consolidar
Set Hoja_Destino = ThisWorkbook.Sheets("AGRUPADO")
'Listamos los archivos Excel a consolidar
iArchivo = nArchivo
'Si la longitud del archivo es cero, salimos del proceso (no existe archivo para consolidar)
If Len(iArchivo) = 0 Then Exit Sub
'Si el nombre del archivo no es igual a nuestro libro seguimos el proceso
If Not iArchivo = MiLibro Then
'Capturamos ruta al iarchivo
Set iLibro = Workbooks.Open(Filename:=nArchivo)
'Contamos las hojas que tiene
fin = iLibro.Sheets.Count
'Iniciamos un bucle por cada hoja, donde seleccionamos los datos desde la fila 2
'hasta el final de la hoja (siempre sin filas en blanco)
'Luego copiamos los datos en la Hoja_Destino, que es la Hoja "AGRUPADO"
'Colocándolos al final de los rangos que se vayan pegando
For i = 1 To fin
iLibro.Sheets(i).Select
Set iRango = iLibro.Sheets(i).Range(Cells(FilaInicio, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set dRango = Hoja_Destino.Range("A" & Hoja_Destino.Cells(Rows.Count, 1).End(xlUp).Row + 1)
iRango.Copy
With dRango
.PasteSpecial xlPasteValues
.PasteSpecial xlFormats
End With
Next
'Cerramos el libro y continuamos el proceso
Application.CutCopyMode = False
iLibro.Close False
End If
Next j
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
' Una vez finalizado, lanzamos mensaje de finalización.
MsgBox ("EL PROCESO HA FINALIZADO CORRECTAMENTE"), vbInformation, "PROCESO DE CONSOLIDACIÓN"
End Sub
Como podéis ver, hemos realizado algunas modificaciones en la macro anterior, entre ellas el tipo de cuadro de diálogo para seleccionar los archivos, con el método .GetOpenFilename y con la propiedad MultiSelect:=True, fundamental para seleccionar varios archivos:
Dado que estamos seleccionando varios archivos debemos especificar en el código el archivo qué vamos a procesar en cada momento, de ahí que debamos introducir un pequeño bucle indicando esta información, (utilizando matrices).
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
nArchivo = dir_Archivo(j)
El resto de la macro es idéntica a la que ofrecí en el post anterior al que nos estamos refiriendo.
Para este ejemplo, no he puesto encabezados de columna en la hoja “AGRUPADO”, de forma que los datos que vayamos a agrupar aparecerán con su encabezado en el resumen final (tal y como podéis ver aquí) este es el resultado de la macro:
Cada encabezado representa la información extraída en cada hoja. Para eliminar los encabezados sobrantes con un simple filtro los podremos borrar (dejando el primero) y tendremos toda la información agrupada.
Si por el contrario, sabemos que todas las hojas tienen la misma estructura, con los mismos campos, podemos indicar el encabezado en la hoja “AGRUPADO”, pero entonces tendríamos que realizar las siguientes modificaciones en la macro (os dejo solo la parte que se modifica):
'Si existen datos en la hoja AGRUPADO, los eliminamos
With ThisWorkbook.Sheets("AGRUPADO")
elimina = Application.CountA(.Range("A:A")) 'eliminamos el +1
If elimina > 1 Then .Range("A2:A" & elimina).EntireRow.Delete
End With
'Iniciamos un for con para identificar los archivos seleccionados
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
nArchivo = dir_Archivo(j)
'Determinamos a partir de que fila vamos a consolidar los datos
FilaInicio = 2
El resultado sería el siguiente:
Es decir, que podemos configurar el proceso según nuestras necesidades.
Es una macro con la que he disfrutado bastante escribiendo el código, ahora solo espero que os resulte de utilidad.
Descarga el archivo de ejemplo pulsando en: AGRUPAR INFORMACIÓN DE VARIOS LIBROS EN UNA HOJA EXCEL
Y la carpeta de ejemplo con los 3 archivos para realizar pruebas: ARCHIVOS DE EJEMPLO PARA PRUEBAS
Hola me encanto la macro es super util!! una duda se puede hacer que solo te consolide una hoja supongamos que tengo 5 archivos pero solo quiero consolidar la hoja 2 eso es posible?
Muchas gracias
Hola Carlos:
Sí, es posible, solo tienes que modificar el código e indicar la hoja que quieres consolidar de cada archivo:
Sub AGRUPAR_ARCHIVOS()
'Definimos variables
Dim i As Integer, j As Integer, FilaInicio As Integer
Dim iArchivo As String, nArchivo As String, MiLibro As String
Dim dir_Archivo As Variant
Dim iRango As Range, dRango As Range
Dim Hoja_Destino As Worksheet, iLibro As Workbook
'Creamos ventana de diálogo para seleccionar los archivos que queremos agrupar
On Error Resume Next
dir_Archivo = Application.GetOpenFilename(Title:="SELECCIONA ARCHIVOS PARA CONSOLIDAR", MultiSelect:=True, filefilter:="Excel files (*.xls*), *.xls*")
On Error GoTo 0
'Si no seleccionamos archivos, salimos del proceso
If Not IsArray(dir_Archivo) Then
Exit Sub
End If
'Si existen datos en la hoja AGRUPADO, los eliminamos
With ThisWorkbook.Sheets("AGRUPADO")
elimina = Application.CountA(.Range("A:A")) + 1
If elimina > 0 Then .Range("A1:A" & elimina).EntireRow.Delete
End With
'Iniciamos un for con para identificar los archivos seleccionados
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
nArchivo = dir_Archivo(j)
'Determinamos a partir de que fila vamos a consolidar los datos
FilaInicio = 1
'Desactivamos actualizacion de pantalla y eventos
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Identificamos el nombre de nuestro libro
MiLibro = ThisWorkbook.Name
'Indicamos la hoja de destino de los datos que queremos consolidar
Set Hoja_Destino = ThisWorkbook.Sheets("AGRUPADO")
'Listamos los archivos Excel a consolidar
iArchivo = nArchivo
'Si la longitud del archivo es cero, salimos del proceso (no existe archivo para consolidar)
If Len(iArchivo) = 0 Then Exit Sub
'Si el nombre del archivo no es igual a nuestro libro seguimos el proceso
If Not iArchivo = MiLibro Then
'Capturamos ruta al iarchivo
Set iLibro = Workbooks.Open(Filename:=nArchivo)
iLibro.Sheets(2).Select
Set iRango = iLibro.Sheets(2).Range(Cells(FilaInicio, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set dRango = Hoja_Destino.Range("A" & Hoja_Destino.Cells(Rows.Count, 1).End(xlUp).Row + 1)
iRango.Copy
With dRango
.PasteSpecial xlPasteValues
.PasteSpecial xlFormats
End With
'Cerramos el libro y continuamos el proceso
Application.CutCopyMode = False
iLibro.Close False
End If
Next j
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
' Una vez finalizado, lanzamos mensaje de finalización.
MsgBox ("EL PROCESO HA FINALIZADO CORRECTAMENTE"), vbInformation, "PROCESO DE CONSOLIDACIÓN"
End Sub
Muy buen aporte amigo! Mi pregunta es si en vez de copiar los datos hacia abajo copie una columna determinada y la agrupe en la hoja consolidado, ejemplo: n archivos, todos con la misma estructura, tome la columna 3 de cada archivo y la copie en el libro nuevo hacia el lado, en el libro de destino columna B, C, D, etc… No sé si fui muy enredado en explicarlo.
Muy buen aporte! Me sirvió muchísimo. Tengo una pregunta, si tengo columnas y filas que tienen celdas vacías la macro se queda en esas celdas y no trae la otra información que se encuentra en filas siguientes. Como se podría cambiar esto? intente incluir la siguiente macro pero siempre con errores.
Application.ScreenUpdating = False
u = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
uc = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column
For i = u To 1 Step -1
cr = WorksheetFunction.CountA(Rows(i))
If cr = 0 Then
Rows(i).Delete
End If
Next
For i = uc To 1 Step -1
cc = WorksheetFunction.CountA(Columns(i))
If cc = 0 Then
Columns(i).Delete
End If
Next
End with
Hola Cristian:
Envíame un archivo con un ejemplo de los datos que deseas consolidar, con la estructura que comentas y como deseas que quede consolidada.
Así será más sencillo ayudarte.
Saludos.
Buen dìa, a que casilla de correo te lo envío? El problema se puede ver con tan solo agregar una fila y columna en blanco en cualquiera de los archivos a los que la macro va a buscar la información.
Hola Cristina:
El correo es: excelsignum@yahoo.es
He insertado varias columnas y filas en blanco y funciona perfectamente. Es decir no deja información sin extraer.
Saludos.
Hola!
La macro funciona genial! Mi pregunta es si es posible que se copie la información, no en una misma hoja, sino que cada archivo de excel que copie lo haga en una hoja distinta con el nombre del archivo correspondiente. Muchas gracias!
Hola Sannnn,
Sería posible, aunque sería otro tipo de programación y temática. Dado que esta macro es para consolidar datos (por eso debe estar en un único lugar). Intento estos días publicar algo al respecto.
Saludos
Hola! Esta información me ha sido de mucha ayuda. Tengo una duda relacionada a una pregunta anterior pero no sé como resolverlo. Por ejemplo, si yo quisiera seleccionar la primera y segunda hoja de los archivos de origen para que se consoliden. ¿Cómo quedaría el código?
Hola.
Eso lo puedes hacer modificando el código en esta parte. Las líneas que te indico Añadimos esto.
Simplemente es un condicional, si es la hoja 1 o a la hoja 2, consolida la información. de lo contrario no leerá los datos.
OJO, las hojas según orden en el libro, no va por nombre de la hoja.
iLibro.Sheets(i).Select
If i = 1 Or i = 2 Then 'Añadimos estos
Set iRango = iLibro.Sheets(i).Range(Cells(FilaInicio, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set dRango = Hoja_Destino.Range("A" & Hoja_Destino.Cells(Rows.Count, 1).End(xlUp).Row + 1)
iRango.Copy
With dRango
.PasteSpecial xlPasteValues
.PasteSpecial xlFormats
End With
End If 'añadimos estos
Next
Muchas gracias Segu. Lo pruebo mañana en la oficina y te cuento como me va.
Saludos!
Recién hoy lo he podido probar. Me copia la primera hoja que necesito pero luego me da un error y no copia la segunda hoja. El código lo dejé de la siguiente manera. Espero que me puedas ayudar.
Sub AGRUPAR_ARCHIVOSSELECCIONANDOHOJAS()
‘Definimos variables
Dim i As Integer, j As Integer, FilaInicio As Integer
Dim iArchivo As String, nArchivo As String, MiLibro As String
Dim dir_Archivo As Variant
Dim iRango As Range, dRango As Range
Dim Hoja_Destino As Worksheet, iLibro As Workbook
‘Creamos ventana de diálogo para seleccionar los archivos que queremos agrupar
On Error Resume Next
dir_Archivo = Application.GetOpenFilename(Title:=»SELECCIONA ARCHIVOS PARA CONSOLIDAR», MultiSelect:=True, filefilter:=»Excel files (*.xls*), *.xls*»)
On Error GoTo 0
‘Si no seleccionamos archivos, salimos del proceso
If Not IsArray(dir_Archivo) Then
Exit Sub
End If
‘Si existen datos en la hoja AGRUPADO, los eliminamos
With ThisWorkbook.Sheets(«BBDD PAQUETERIA»)
elimina = Application.CountA(.Range(«A:A»)) + 1
If elimina > 1 Then .Range(«A2:A» & elimina).EntireRow.Delete
End With
‘Iniciamos un for con para identificar los archivos seleccionados
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
nArchivo = dir_Archivo(j)
‘Determinamos a partir de que fila vamos a consolidar los datos
FilaInicio = 2
‘Desactivamos actualizacion de pantalla y eventos
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
‘Identificamos el nombre de nuestro libro
MiLibro = ThisWorkbook.Name
‘Indicamos la hoja de destino de los datos que queremos consolidar
Set Hoja_Destino = ThisWorkbook.Sheets(«BBDD PAQUETERIA»)
‘Listamos los archivos Excel a consolidar
iArchivo = nArchivo
‘Si la longitud del archivo es cero, salimos del proceso (no existe archivo para consolidar)
If Len(iArchivo) = 0 Then Exit Sub
‘Si el nombre del archivo no es igual a nuestro libro seguimos el proceso
If Not iArchivo = MiLibro Then
‘Capturamos ruta al iarchivo
Set iLibro = Workbooks.Open(Filename:=nArchivo)
‘Contamos las hojas que tiene
fin = iLibro.Sheets.Count
‘Iniciamos un bucle por cada hoja, donde seleccionamos los datos desde la fila 2
‘hasta el final de la hoja (siempre sin filas en blanco)
‘Luego copiamos los datos en la Hoja_Destino, que es la Hoja «AGRUPADO»
‘Colocándolos al final de los rangos que se vayan pegando
For i = 1 To fin
iLibro.Sheets(i).Select
If i = 2 Or i = 4 Then ‘Añadimos estos
Set iRango = iLibro.Sheets(i).Range(Cells(FilaInicio, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set dRango = Hoja_Destino.Range(«A» & Hoja_Destino.Cells(Rows.Count, 1).End(xlUp).Row + 1)
iRango.Copy
With dRango
.PasteSpecial xlPasteValues
.PasteSpecial xlFormats
End With
End If
Next
‘Cerramos el libro y continuamos el proceso
Application.CutCopyMode = False
iLibro.Close False
End If
Next j
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
‘ Una vez finalizado, lanzamos mensaje de finalización.
MsgBox («EL PROCESO HA FINALIZADO CORRECTAMENTE»), vbInformation, «PROCESO DE CONSOLIDACIÓN»
End Sub
Acabo de probar tu macro y funciona perfectamente. Desconozco el formato o estructura de tus datos, revisa que tengan encabezados y que comiencen en la fila 1 y columna 1 de cada hoja.
Saludos.
Lo mismo te iba a comentar. Me genera problemas con solo un libro. Muchas gracias por la ayuda !
Muy buenas!
Un gran aporte para todos nosotros.
Me surge un problema al utilizar la macro y es que solo me llega hasta la columna AQ y necesitaba que llegara 5 columnas más. No entiendo muy bien el problema pues la macro solo define filas y no restringe columnas. Me podrías ayudar.
Muchas gracias.
Hola Sergio, deberías obtener los datos de la columna AQ. No sería un problema de versiones de Excel dado que es la columna 43 (creo). verifica que en los datos no tengas columnas vacías completamente (encabezados, etc). Ese podría ser el problema. Otra solución sería confeccionar el rango:
Set iRango = iLibro.Sheets(i).Range(Cells(FilaInicio, 1), Cells(65000, 49)) donde 65000 el límite de filas (puedes hacerlo más pequeño) y 60 el numero de la columna, que se corresponde con la columna «AW».
Saludos.
hola tengo una consulta, que pasa, si a esos primeros 3 archivos agrupados quiero luego agregar un archivo, como haria para que se importe abajo de los primeros archivos ya agrupados.
Hola Andrés:
Si te fijas en el código, hay una parte en la que indico que si antes de consolidar existen datos, que los borre. Por ese motivo cuando añades uno solo se ve el que has añadido y no los otros.
Lo único que debes hacer es borrar esa parte de la macro (o comentarla).
'Si existen datos en la hoja AGRUPADO, los eliminamos
With ThisWorkbook.Sheets("AGRUPADO")
elimina = Application.CountA(.Range("A:A")) + 1
If elimina > 0 Then .Range("A1:A" & elimina).EntireRow.Delete
End With
Saludos.
muchas gracias estimado, se agradece tu apoyo y esperando aya salud por tu lado junto a tu familia.
me parece muy buena la macro y la explicacion paso por paso muy profesional, aunque quisiera saber si es posible que se copie la información, no en una misma hoja, sino que cada archivo de excel que copie lo haga en una hoja distinta con el nombre del archivo correspondiente. Muchas gracias!
Hola Sergio, es necesario reprogramar la macro para realizar lo que indicas. Esta sería una de las formas de hacerlo. Te paso aquí la macro completa, saludos.
Sub AGRUPAR_ARCHIVOS()
'Definimos variables
Dim i As Long, j As Long, FilaInicio As Long, S As Long
Dim nueva As Long, archivos As Long, thojas As Long
Dim iArchivo As String, nArchivo As String, MiLibro As String
Dim dir_Archivo As Variant
Dim iRango As Range, dRango As Range
Dim Hoja_Destino As Worksheet, iLibro As Workbook
'Creamos ventana de diálogo para seleccionar los archivos que queremos agrupar
On Error Resume Next
dir_Archivo = Application.GetOpenFilename(Title:="SELECCIONA ARCHIVOS PARA CONSOLIDAR", MultiSelect:=True, filefilter:="Excel files (*.xls*), *.xls*")
On Error GoTo 0
'Si no seleccionamos archivos, salimos del proceso
If Not IsArray(dir_Archivo) Then
Exit Sub
End If
'Iniciamos un for con para identificar los archivos seleccionados
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
nArchivo = dir_Archivo(j)
'Añadimos cuantas hojas necesitamos (además de la inicial)
archivos = UBound(dir_Archivo)
thojas = ThisWorkbook.Sheets.Count
If thojas < = archivos Then
nueva = archivos - thojas + 1
ThisWorkbook.Sheets.Add After:=Sheets("CONSOLIDAR"), Count:=nueva
End If
'nombramos las hojas con el nombre de los archivos.
For S = LBound(dir_Archivo) To UBound(dir_Archivo)
Sheets(S + 1).Name = Dir(dir_Archivo(S))
Next S
'Determinamos a partir de que fila vamos a consolidar los datos
FilaInicio = 1
'Desactivamos actualizacion de pantalla y eventos
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Identificamos el nombre de nuestro libro
MiLibro = ThisWorkbook.Name
'Indicamos la hoja de destino de los datos que queremos consolidar
Set Hoja_Destino = ThisWorkbook.Sheets(Dir(nArchivo))
'Listamos los archivos Excel a consolidar
iArchivo = nArchivo
'Si la longitud del archivo es cero, salimos del proceso (no existe archivo para consolidar)
If Len(iArchivo) = 0 Then Exit Sub
'Si el nombre del archivo no es igual a nuestro libro seguimos el proceso
If Not iArchivo = MiLibro Then
'Capturamos ruta al iarchivo
Set iLibro = Workbooks.Open(Filename:=nArchivo)
'Contamos las hojas que tiene
fin = iLibro.Sheets.Count
For i = 1 To fin
iLibro.Sheets(i).Select
Set iRango = iLibro.Sheets(i).Range(Cells(FilaInicio, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set dRango = Hoja_Destino.Range("A" & Hoja_Destino.Cells(Rows.Count, 1).End(xlUp).Row + 1)
iRango.Copy
With dRango
.PasteSpecial xlPasteValues
.PasteSpecial xlFormats
End With
Next
'Cerramos el libro y continuamos el proceso
Application.CutCopyMode = False
iLibro.Close False
End If
Next j
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
' Una vez finalizado, lanzamos mensaje de finalización.
MsgBox ("EL PROCESO HA FINALIZADO CORRECTAMENTE"), vbInformation, "PROCESO DE CONSOLIDACIÓN"
End Sub
Buenas noches, muchas gracias. Excelentes macros!…
muy buen ejemplo, pero si deseo hacer lo siguiente:
añadir un valor a cada respuesta del usuario, es decir, si la pregunta tiene varias opciones de respuestas SI(1) NO(2) NO SE(3) y lo que deseo consolidar son esos valores…como lo hago???
Hola Noris:
No comprendo cuál es tu pregunta… Se trata de consolidar archivos?. Puedes enviar un ejemplo en un archivo de Excel explicando detenidamente qué es lo que necesitas hacer.
Por ejemplo esa pregunta que indicas, donde está, en un formulario, en un msgbox??, esos datos donde los vuelcas? ¿cómo los quieres consolidar? en qué lugar??
Hola Segu, saludos desde argentina. Excelente aporte y era lo que necesitaba. Consulta. Necesito que en la hoja de «AGRUPADOS» NO se sobreescriba o borre la fila 1, ya que en mis consolidaciones, edité el codigo para que traiga valores desde la hoja dos. Asi no tengo el encabezado repetido. O hay otra forma de hacerlo?. Lo otro, necesito que la hoja de «AGRUPADOS», luego de la importacion de datos quede «NO EDITABLE» osea que no se pueda manipular. (solo lectura) de forma automatica. Puede ser? GRACIAS!!!!!
Hola Nicolas:
La respuesta a la primera pregunta está en este otro post:
https://excelsignum.com/2017/03/28/agrupar-informacion-de-varios-libros-en-una-hoja-excel/
Lo otro es proteger la hoja:
Es decir tendrás que desproteger cuando se inicie la macro y proteger antes de finalizar
With Sheets(«AGRUPADO»)
.Unprotect
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
Genial, gracias Buenisimo… Funcionó a la perfeccion todo….. Otra consulta. Si una hoja esta OCULTA tambien la trae? Si asi fuera, como hago para que «evite» traer la hoja numero 1? Gracias
Hola NIcolas;
LO evitas en la parte de la macro que tiene el bucle:
For i = 1 To fin
debes iniciarlo en la hoja 2, es decir, For i=2 to fin
Muy buena información!.
Consulta, uno puede extraer datos desde una hoja de calculo ubicada en Google Drive?.
Dentro de ese archivo, que contiene muchas hojas, solo necesito rescatar algunas, las que poseen el mismo formato.
Es aplicable esta Macro?
Muchas gracias.
Hola Sebastián:
La única forma de que funcionase correctamente sería que te descargues la info de google Drive en el equipo y que esté sincronizada con la nube, de esa forma podrías ejecutar la macro en el equipo.
Hacerlo directamente en la nube no sería posible con este código.
Saludos.
Hola Segu, gracias por la macro!!
una pregunta, si quiero comenzar a ingresar los datos desde los otros libros desde la fila 3 de la hoja CONSOLIDADO que tengo que cambiar en el código?
Saludos!
Hola Diego,
Solo tienes que indicar la linea en el código:
‘Determinamos a partir de que fila vamos a consolidar los datos
FilaInicio = 3
Saludos
Hola Segu, gracias por el aporte.
Una consulta, que debería cambiar en el código si necesito consolidar solamente un rango especifico, en lugar de todas las celdas con contenido. Por Ejemplo, el rango a consolidar, así no hayan datos en todas las celdas, siempre es (M5 : X45).
Gracias por el apoyo.
Saludos!
Y en la macro sustituir esto:
Set iRango = iLibro.Sheets(i).Range(Cells(FilaInicio, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
por esto:
Set iRango = iLibro.Sheets(i).Range(«M5:X45»)
Saludos!!
Segu Gracias por la ayuda.
Otra consulta, algunos libros que necesito consolidar tienen hojas ocultas, lo que parece ocasionar un error (Error 1004 – «Error en el método select de la clase worksheets). Esto solo me sucede con libros que tienen hojas ocultas. ¿Que podría cambiar del código para que consolide aquellas hojas con un mismo nombre y de esa manera el código ignore las hojas ocultas al consolidar? El nombre de las hojas que quiero consolidar es «Reporte Gastos 2019».
Saludos y gracias nuevamente
Hola Mario:
Si quieres consolidar únicamente la hoja que indicas debes modificar en la macro esto:
iLibro.Sheets(i).Select
Por esto
iLibro.Sheets(«Reporte Gastos 2019»).Select
Saludos
Hola Segu,
Solo paso a darte las gracias, muy útil la Macro.
Saludos!
Hola Segu, una pregunta no se si sea por el tipo de archivo, pero cuando corro la macro me marca un error en esta linea de codigo (Error 1004 – «Error en el método select de la clase worksheets)
For i = 1 To fin
iLibro.Sheets(i).Select
Como podría arreglarlo?
Hola Antonio:
Qué tipo de datos quieres consolidar. No deben existir celdas filas vacías y el tipo de archivo obviamente debe ser excel. Puede ser que el problema es que estás utilizando el archivo de ejemplo para consolidar que está en excel 2003 y quieres pegar rango de excel 2010 o superior. Para solucionarlo, solo debes pasar la macro de mi ejemplo a excel con extensión .xlsm, guardarlo y VOLVERLO a abrir. así estarás trabajando con archivos con el mismo formato de excel.
Saludos
Hola Segu, ¡¡¡muchas gracias por la macro, es muy últi!!!
Sólo una pregunta: ¿se puede introducir algún comando que cree una columna adicional donde se indique el nombre del fichero del que proviene cada fila de datos?
Por ejemplo, en el ejercicio que usted nos muestra, una columna que diga «ARCHIVO1.xls» en los primeros datos, «ARCHIVO2.xls» en los datos del medio y «ARCHIVO3.xls» en los datos del final.
Muchas gracias de antemano 🙂
Hola Fernando,
Tendría que revisar la macro, pero requiere realizar varias modificaciones dado que lo que se hace es copiar y pegar. En cuanto tenga tiempo, intento modificarlo.
Saludos.
bUENAS TARDES PUEDO CONSOLIDAR VARIOS ARCHIVOS DE EXCEL (SOLO ALGUNOS CAMPOs) PERO EN UN LIBRO DESTINO? GRACIAS
Hola Ricardo:
Es posible, pero tendría que estudiarlo, esta programación está realizada para consolidar en la misma hoja. Si tengo tiempo intento hacer algo.
Saludos.
Hola Segu:
Me sirvió muchísimo esta macro pero quisiera saber si se puede hacer lo siguiente:
Quiero copiar la información de varias hojas de excel y pegarlas en el mismo libro. ¿Cómo quedaría la macro?
Saludos y muchas gracias
Hola Javier:
Eso es precisamente lo que hace este código. Se consolidan todas las hojas en un único archivo.
Saludos.
Pero todas esas hojas corresponden a un solo libro?
Saludos
Pueden corresponder a uno o más libros, depende de los libros que selecciones.
Saludos
Hola Sigu!! Muchas gracias por semejante trabajo.
Te consulto, hay alguna forma de que, en lugar de traer todos los ficheros a la hoja «AGRUPADO», cada archivo se agregue en una hoja diferente en lugar de en la misma? Gracias!!!