
¡Hola, futuro experto en Excel! Prepárate, porque vamos a sumergirnos en el mundo de las macros para unir hojas de cálculo. No te preocupes, te guiaré paso a paso. ¡Tú puedes con esto!
Preparación del Entorno
Primero, abre Excel. Luego, necesitas activar la pestaña "Desarrollador" o "Programador". Ve a "Archivo" -> "Opciones" -> "Personalizar cinta de opciones" y marca la casilla correspondiente.
Una vez activada la pestaña, la encontrarás en la barra superior. Aquí es donde accederemos al Editor de Visual Basic para Aplicaciones (VBA). Este editor es donde escribiremos nuestro código. ¡No te asustes, es más fácil de lo que parece!
Must Read
Escribiendo la Macro
Dentro del editor VBA, inserta un nuevo módulo. Ve a "Insertar" -> "Módulo". Aquí pegaremos el código de la macro. Vamos a ver un ejemplo de macro.
Aquí tienes un ejemplo básico de macro que puedes adaptar:
Sub UnirHojas()
Dim Ruta As String
Dim NombreArchivo As String
Dim Hoja As Worksheet
Dim LibroDestino As Workbook
Dim LibroOrigen As Workbook
Set LibroDestino = ThisWorkbook
Ruta = InputBox("Introduce la ruta de la carpeta con los archivos Excel:")
If Ruta = "" Then Exit Sub
NombreArchivo = Dir(Ruta & "\.xls")
Do While NombreArchivo <> ""
Set LibroOrigen = Workbooks.Open(Ruta & "\" & NombreArchivo)
For Each Hoja In LibroOrigen.Worksheets
Hoja.Copy After:=LibroDestino.Sheets(LibroDestino.Sheets.Count)
Next Hoja
LibroOrigen.Close SaveChanges:=False
NombreArchivo = Dir()
Loop
MsgBox "¡Hojas unidas con éxito!"
End Sub
Ahora, analicemos el código línea por línea. La primera línea, `Sub UnirHojas()`, declara el inicio de la subrutina llamada "UnirHojas". Esta es la que llamaremos para ejecutar la macro.

Luego, declaramos las variables. `Dim Ruta As String` define la variable `Ruta` para guardar la ruta de la carpeta. `Dim NombreArchivo As String` guarda el nombre de cada archivo Excel.
`Dim Hoja As Worksheet` representa cada hoja dentro de un libro. `Dim LibroDestino As Workbook` es el libro donde se unirán las hojas. `Dim LibroOrigen As Workbook` es el libro de donde provienen las hojas.
`Set LibroDestino = ThisWorkbook` establece que el libro activo es el destino. `Ruta = InputBox("Introduce la ruta de la carpeta con los archivos Excel:")` solicita al usuario la ruta de la carpeta.

La línea `NombreArchivo = Dir(Ruta & "\.xls")` obtiene el primer archivo Excel de la carpeta. El bucle `Do While NombreArchivo <> ""` recorre todos los archivos de la carpeta.
`Set LibroOrigen = Workbooks.Open(Ruta & "\" & NombreArchivo)` abre cada libro Excel. El bucle `For Each Hoja In LibroOrigen.Worksheets` itera sobre cada hoja en el libro de origen.
`Hoja.Copy After:=LibroDestino.Sheets(LibroDestino.Sheets.Count)` copia cada hoja al final del libro de destino. `LibroOrigen.Close SaveChanges:=False` cierra el libro de origen sin guardar los cambios.
Finalmente, `NombreArchivo = Dir()` pasa al siguiente archivo en la carpeta. `MsgBox "¡Hojas unidas con éxito!"` muestra un mensaje de confirmación.

Ejecutando la Macro
Para ejecutar la macro, vuelve a la hoja de Excel. En la pestaña "Desarrollador", haz clic en "Macros". Selecciona la macro "UnirHojas" y haz clic en "Ejecutar".
¡Voilà! Aparecerá un cuadro de diálogo pidiendo la ruta de la carpeta. Ingresa la ruta correcta y presiona "Aceptar". La macro hará su magia.
Consejos Adicionales
Asegúrate de que todos los archivos estén cerrados antes de ejecutar la macro. Esto evitará errores. Además, la ruta de la carpeta debe ser la correcta.

Guarda el archivo Excel con la macro como un archivo habilitado para macros (.xlsm). Esto es crucial para que la macro funcione correctamente. ¡No lo olvides!
Resumen
Hemos aprendido a crear una macro para unir varias hojas de Excel en una sola. Hemos cubierto la preparación del entorno, la escritura del código y la ejecución de la macro.
Recuerda los pasos clave: activar la pestaña "Desarrollador", insertar un módulo en el editor VBA, pegar el código, modificar la ruta si es necesario, y ejecutar la macro. ¡Mucha suerte con tu examen!
¡Confío en que vas a aprobar con honores! ¡Sigue practicando y no te rindas!