Hoy quiero mostrarles una macro para resolver uno de estos problemas que suceden de vez en cuando.
Qué problema?
Uno de los problemas más comunes en la gestión de datos es agrupar todos los datos. Digamos que tenemos algunos datos dispersos en varias hojas que queremos reunir en una sola hoja. ¿Como lo harías?
- Una forma es copiarlo desde múltiples hojas y pegarlo en una ubicación
- O también se puede escribir una simple macro para que haga lo mismo, ahorrando tiempo
Imaginemos que tenemos unos datos como los siguientes:
Tablas de transacciones para el añ0 2007. Pero a su vez tenemos otra tabla igual para el año 2008, y para 2009 y 2010. Así que los datos están dispersados en 4 hojas diferentes. Pero se ha de tener en cuenta que los encabezados en los datos son los mismos (que es una situación preferible).
Pues para consolidarlos en la hoja Consolidar, en vez de copiar los datos de cada tabla y pegarlo, se podría hacer rápidamente con la siguiente macro.
Sigue los siguientes pasos
Tablas de transacciones para el añ0 2007. Pero a su vez tenemos otra tabla igual para el año 2008, y para 2009 y 2010. Así que los datos están dispersados en 4 hojas diferentes. Pero se ha de tener en cuenta que los encabezados en los datos son los mismos (que es una situación preferible).
Pues para consolidarlos en la hoja Consolidar, en vez de copiar los datos de cada tabla y pegarlo, se podría hacer rápidamente con la siguiente macro.
Sub consolidardatos()
Dim var As Integer
Dim hj As Worksheet
var = 0
For Each hj In Worksheets
If hj.Name = "Consolidar" Then
var = 1
Exit For
End If
Next hj
If var = 0 Then Sheets.Add(Before:=Sheets(1)).Name = "Consolidar" Else
Sheets("Consolidar").Move Before:=Sheets(1)
Sheets(2).Activate
Sheets(2).Range(Range("a1"), Range("A1").End(xlToRight)).Copy
Sheets(1).Activate
Sheets("Consolidar").Paste Destination:=Range("a1")
For Each hj In Worksheets
If hj.Name <> ActiveSheet.Name Then
With hj
.Range("A2:N" & .Range("A" & Rows.Count).End(xlUp).Row).Copy _
Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1)
End With
End If
Next hj
ActiveWindow.DisplayGridlines = False
Range("A1").CurrentRegion.Select
Selection.Columns.AutoFit
End Sub
Sigue los siguientes pasos
- Copia el código
- Abra el libro de Excel donde deseas consolidar los datos
- Presiona el atajo Alt + F11 para abrir la ventana de Visual Basic
- En el menú Insertar, hacemos clic en Módulo o utilizamos el acceso directo Alt + i + m para agregar un Módulo. El módulo es el lugar donde se escribe el código
- En el módulo en blanco pegamos el código y cerramos el Editor de Visual Basic
- A continuación, utilizamos el atajo Alt + F8 para abrir el cuadro de macro. Ahí tendríamos la lista de todas las macros.
- Se podrá ver la macro que acabamos de pegar en el módulo como 'consolidardatos'.
- Ejecuta la macro. Al instante se insertará una nueva hoja (Consolidar) y la Macro copiará automáticamente los datos del resto de las hojas
Algunas cosas a tener en cuenta
- Asegúrate de activar macros antes de empezar a trabajar con el código
- El código de VBA es dinámico y se puede utilizar en cualquier libro
- El código creará una nueva hoja llamada Consolidar para consolidar los datos. Si ya se tiene esa hoja en su libro, los datos se consolidarán en esa hoja
- El código se puede cambiar para adaptarse a su rango de datos
Te ha gustado el artículo?
No te olvides de mostrar tu gratitud hacia el autor (yo) mediante una de las 3 siguientes acciones:
1. Puedes dejar una donación pinchando en la siguiente imagen.
2. Puedes hacer clic en los anuncios mostrados en la página
3. Puedes recomendar el artículo en Google haciendo clic en g+1 (justo después del artículo), también puedes compartirlo en Facebook, y/o dejar comentarios.
1. Puedes dejar una donación pinchando en la siguiente imagen.
2. Puedes hacer clic en los anuncios mostrados en la página
3. Puedes recomendar el artículo en Google haciendo clic en g+1 (justo después del artículo), también puedes compartirlo en Facebook, y/o dejar comentarios.
Quieres aprender más en Excel o tienes algún problema que necesita solución?
Puedo ofrecer servicios de consultoría así como cursos personalizados online. Mírate el siguiente enlace si estás interesado/a.
El Sabio de Excel busca colaborades del blog
Si te interesa compartir tu conocimiento sobre Excel de tal manera que puedas ayudar a otras personas, por favor mándame un email a elsabiodeexcel@gmail.com
HOLA PROFE SI USTED QUISIERA CONSOLIDAR SOLO LAS HOJAS QUE USTED DESEE, cOMO SERIA ?
ResponderEliminarPUES TIENE OTRAS HOJAS DE RESUMENES Y CALCULOS QUE NO SON LA FUENTE DE LOS DATOS
DIGAMOS LA FUENTE DE DATOS ESTA EN MESES
Y QUIERO SOLO CONSOLIDAR LAS TABLAS DE LOS MESES
GRACIAS
MI CORREO iseldelcarmen@yahoo.es
Buenas, aqui que habria que indicar qué hojas quieres consolidar.
EliminarIf hj.Name <> ActiveSheet.Name Then
Por ejemplo, se puede agregar If hj.Name <> ActiveSheet.Name AND hj.Name="2022" Then
OR If hj.Name <> ActiveSheet.Name AND NOT(hj.Name="Reporte") Then
Y ahi ya pones los anidados que quieras.
Espero que te ayude
no quiero que se copie formulas solo valores...donde le pongo el pasteSpecial
ResponderEliminarPon esto en vez de Sheets("Consolidar").Paste
EliminarSheets("Consolidar").PasteSpecial Paste:=xlPasteValues
Disculpe profesor y para pegar hacia la derecha como lo podria hacer??
ResponderEliminarHola, si quisiera pegar los datos de forma horizontal que debo cambiar?
ResponderEliminarBuenas, gracias por tu comentario,
ResponderEliminarEstas son las lineas que dice lo que copia y donde lo pega. Pues eso se debería modificar.
Saludos
.Range("A2:N" & .Range("A" & Rows.Count).End(xlUp).Row).Copy _
Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1)