Hola a todos, paso a compartir una macro que me armé con CHATGPT para consolidar en una única hoja un libro de excel. La armé con el propósito de consolidar las hojas de los extractos bancarios que iba convirtiendo a excel, para ganar tiempo ahí.
La lógica de la macro es: Especificarle a partir de qué fila copia las hojas y ejecutarla, nada más. Dado que la utilizo para consolidar extractos bancarios, la hoja "resultado" se llama "Extracto completo". Si quieren, toquen el código y modifiquen todo a su gusto. De eso se trata, no?
Les dejo las instrucciones y abajo el código:
Instrucciones para ejecutar la macro:
1) Abrir el excel que tenga el extracto;
2) Buscar en las Sheet2, Sheet3, etc el número de fila donde empiezan los movimientos;
3) Con Alt + F11 se abre el editor de Visual Basic;
5) Ahí buscas en el menú arriba "insertar" y "modulo" (puede estar en inglés);
4) Ahí se pegas el código que dejo abajo;
5) Guardás. Te va aparecer una advertencia del tipo de archivo. Le das en "si";
6) Ahora con Alt+F8 te abre el menú de Macros y elegís la que tiene el nombre "CombinaHojasConCuadroConsulta" y le das ejecutar;
7) Te va a pedir el número de fila del punto 2). Si no sabés qué poner, poné 1. Ahí te va a copiar todas las hojas enteras;
8) Se te va a crear la hoja llamada "Extracto completo". Y si te salta un cartel de advertencia tocás en "End". Tiene que ver con que el código está programado para hacer iteraciones por 400 hojas. Y si el extracto tiene menos hojas... el cartel sale avisando que terminó con las hojas. Tocas "end" y listo;
9) Listo, Acomodá el extracto si es necesario. O si quedó mal eliminá la hoja y arrancá de nuevo, pero corregí el número de fila si se ejecutó mal. Cuestión de ir probando.
Acá va el código
Sub ConsolidaTodasLasHojas_LS_v2()
Dim hojaDestino As Worksheet
Dim hojaOrigen As Worksheet
Dim i As Integer
Dim hojaExistente As Boolean
Dim filaInicio As Integer
' Pregunta al usuario la fila de inicio
filaInicio = InputBox("Por favor, ingresa la fila desde la que deseas comenzar a copiar:", "Fila de Inicio")
If Not IsNumeric(filaInicio) Or filaInicio < 1 Then
MsgBox "Debes ingresar un número válido mayor o igual a 1.", vbExclamation, "Error"
Exit Sub
End If
' Comprueba si la hoja de destino "Extracto Completo" existe
hojaExistente = False
For Each hoja In ThisWorkbook.Sheets
If hoja.Name = "Extracto Completo" Then
hojaExistente = True
Exit For
End If
Next hoja
' Si la hoja de destino no existe, créala
If Not hojaExistente Then
ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = "Extracto Completo"
End If
' Establece la hoja de destino
Set hojaDestino = ThisWorkbook.Sheets("Extracto Completo")
' Loop a través de todas las hojas del libro
For Each hojaOrigen In ThisWorkbook.Sheets
' Verifica si la hoja actual no es la hoja de destino
If hojaOrigen.Name <> hojaDestino.Name Then
' Copia el contenido de la hoja de origen desde la fila de inicio hacia abajo
Dim lastRow As Long
lastRow = hojaOrigen.Cells(hojaOrigen.Rows.Count, "A").End(xlUp).Row
If lastRow >= filaInicio Then
hojaOrigen.Range("A" & filaInicio & ":A" & lastRow).EntireRow.Copy Destination:=hojaDestino.Cells(hojaDestino.UsedRange.Rows.Count + 1, 1)
End If
End If
Next hojaOrigen
End Sub
'