Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

domingo, 7 de mayo de 2017

Una macro para consolidar datos provenientes de varias hojas

Hola.

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?


  1. Una forma es copiarlo desde múltiples hojas y pegarlo en una ubicación 
  2. 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.

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.

PayPal. La forma rápida y segura de pagar en Internet


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


Subscríbete y recibe todos las entradas por email


Para ello regístrate suministrando tu email en el sitio "Recibe los trucos en tu email" del menú de la derecha.

O sígueme por las redes sociales

7 comentarios:

  1. HOLA PROFE SI USTED QUISIERA CONSOLIDAR SOLO LAS HOJAS QUE USTED DESEE, cOMO SERIA ?
    PUES 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

    ResponderEliminar
    Respuestas
    1. Buenas, aqui que habria que indicar qué hojas quieres consolidar.

      If 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

      Eliminar
  2. no quiero que se copie formulas solo valores...donde le pongo el pasteSpecial

    ResponderEliminar
    Respuestas
    1. Pon esto en vez de Sheets("Consolidar").Paste

      Sheets("Consolidar").PasteSpecial Paste:=xlPasteValues

      Eliminar
  3. Disculpe profesor y para pegar hacia la derecha como lo podria hacer??

    ResponderEliminar
  4. Hola, si quisiera pegar los datos de forma horizontal que debo cambiar?

    ResponderEliminar
  5. Buenas, gracias por tu comentario,

    Estas 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)

    ResponderEliminar