Macro para consolidar info de varias hojas

¡

Agradecería vuestra ayuda, con un código que me permita consolidar en una hoja3, el contenido de la hoja1 y la hoja2. El contenido de las hojas 1 y 2, se actualiza de forma regular. La idea seria copiar y pegar el rango con información de la hoja1 en la hoja3, y justo debajo, copiar la información de la hoja2, asi tendría una hoja3 con la información consolidada.

El rango de rótulos de las hojas 1 y 2, van de A1:CX, y el número de filas se incrementa a medida que se ingresa información.

1 respuesta

Respuesta
1

Puedes mandarme el fichero para ver como es y probar con el.

Mi correo es

[email protected]

Por favor pon como asunto el título de la pregunta y como nombre del fichero pon

MacroConsolidar.XLSX (o XLS o lo que corresponda)

Buenos días,

Te he enviado el fichero de acuerdo a tus indicaciones.

Gracias.

Un saludo,

Ya creo que está. Escribo aquí la respuesta pero mejor espera, que en unos segundos te mando el fichero con la macro. Y aquí hay algunas líneas muy largas y no sé si se verán vbien

Private Sub Boton_Consolidar_Click()
'by ValeroASM
Dim Filas As Integer
Application.ScreenUpdating = False
'Primero borramos la hoja Consolidado
With ThisWorkbook.Sheets("Consolidado")
   .Range("A1", .Cells(.Range("A65536").End(xlUp).Row, .Range("BB1").End(xlToLeft).Column)).Delete
End With
'Despues copiamos la hoja Reporte1 y la copiamos en Consolidado
'Anotamos el número de filas que se copian
With ThisWorkbook.Sheets("Reporte1")
   Filas = .Range("A65536").End(xlUp).Row
 .Range("A1", .Cells(Filas, .Range("BB1").End(xlToLeft).Column)).Copy _
 Destination:=ThisWorkbook.Sheets("Consolidado").Cells(1, 1)
End With
'Ahora copiamos la hoja Reporte2 y la pegamos pero una fila más abajo de las que había
With ThisWorkbook.Sheets("Reporte2")
   .Range("A2", .Cells(.Range("A65536").End(xlUp).Row, .Range("BB1").End(xlToLeft).Column)).Copy _
          Destination:=ThisWorkbook.Sheets("Consolidado").Cells(Filas + 1, 1)
End With
'Y ahora ordenamos la hoja consolidado por primera columna, descendiendo y sin contar la primera fila
With ThisWorkbook.Sheets("Consolidado")
   .Range("A1", .Cells(.Range("A65536").End(xlUp).Row, .Range("BB1").End(xlToLeft).Column)).Sort _
          key1:=.Range("A:A"), order1:=xlDescending, Header:=xlYes
End With
Application.ScreenUpdating = True
ThisWorkbook.Sheets("Consolidado").Activate
End Sub

Ya me dirás si funciona y si no pídeme lo que haya que corregir. Y si ya está bien no olvides puntuar.

Hola Valero,

He probado el macro y funciona perfectamente, pero necesito ampliar el rango de columnas, ya que la estructura final de la hoja contiene información hasta la columna "AD". ¿Que rango debería modificar? ¿cambiar el valor "BB1" por "AD1"?.

Gracias de antemano por tu tiempo.

Un saludo,

Si te fijas en la líena tenemos esto

Cells(.Range("A65536").End(xlUp).Row, .Range("BB1").End(xlToLeft).Column)

Con ello se pretende situarnos en una celda tan abajo y tan a la derecha que el rango ocupe todos los datos que pueda haber en la hoja y esa orden se encarga de quitar las que no se utilizan.

En la literatura sobre Excel está completamente extendido el usar 65536 como la fila más baja, eso se debe a que versiones anteriores de Excel no admitián mas filas, aunque ahora si admiten más.

Sin embargo no existe tal coincidencia sobre la columna más a la derecha. Ahora mismo he averiguado que Excel 2003 tenía 256 columnas y 2007 tiene 16384.

Luego la columna más a la derecha en 2033 seguro que puede ser hasta la HZ al menos y en el 2007 es XFD que eso si lo he encontrado.

Yo casi me quedé corto, veo que tú utilizas muchas columnas.

Pues de momento te sirve con lo que puse, pero si pones "HZ1" tendrás mayor seguridad aun. No consiste en poner las columnas justas que vas a usar sino más por si algún día te da por usarlas.

Y eso es todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas