Curso Excel VBA y Macros – Cap. 28 – Práctica 2: Optimizando macro para Agrupar hojas en una sola
En este tutorial vamos a retomar el desarrollo que hicimos en el capítulo 27, donde veíamos cómo agrupar información de varias hojas en una sola.
Veremos algunas técnicas muy efectivas que nos ayudarán a realizar desarrollos más óptimos logrando hacer lo mismo que la práctica anterior, pero en lugar de movernos entre hojas, desde la primera hoja, haciendo referencia a los rangos de las demás hojas, logramos agrupar la información en una sola hoja.
Así que si quieres pasar al siguiente nivel en la optimización de macros, mira el video tutorial.
Ver video Capítulo 28 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Caso práctico 1, agrupar hojas
Para poder agrupar los datos varias hojas en una sola, debemos tener los mismos encabezados en todas las hojas para garantizar que la hoja concentradora no tenga columnas de más.
La macro recorrerá cada una de las hojas y tomará los datos para luego pegarlos en la primera hoja, donde se concentrarán los datos.
También la macro puede omitir hojas que cumplan con un nombre para omitir el contenido y no copiar nada contenido en esa hoja.
Temas tratados
En este video tutorial repasaremos los siguientes temas:
-
Tipos de variables.
-
Función MsgBox.
-
Instrucción If…Then…Else.
-
Agregar hojas.
-
Copiar celdas.
-
Guardar valores en variables.
-
Ciclo For…Next.
-
Cambiar nombre de hoja.
-
Autoajustar tamaño de columnas.
Caso práctico 2, agrupar hojas haciendo referencia a rangos de otras hojas
En este caso práctico 2, optimizamos el ejemplo del caso 1 con algunas mejoras significativas que nos harán entender mejor el tema de las referencias a rangos y que ejecute una macro sin necesitar de estar activando hojas para copiar los datos.
La nueva macro se podrá ejecutar sin problema aunque las hojas estén ocultas, además de aprender a usar el Operador AND para comparar varios nombres de hojas y omitirlas para no tomar en cuenta su contenido.
Temas tratados macro optimizada
Además de los temas que vimos en la práctica anterior, en esta optimización veremos los siguientes temas:
-
Usar el operador AND para comparar si el nombre de una hoja es diferente a cierto nombre Y a otro nombre.
-
Usaremos la instrucción SET para asignar rangos a variables de objeto.
-
Usaremos la propiedad COUNT para tomar el conteo de filas y columnas de rangos.
-
Combinaremos las propiedades OFFSET y RESIZE para tomar los dato cada una de las hojas y copiarlos excluyendo encabezados.
Código VBA de la macro
Option Explicit 'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Sub AgruparHojas() Dim Cuenta As Integer Dim i As Integer Dim MsgContinuar As Boolean Dim Rango As Range Dim Rango2 As Range Dim CuentaF As Integer Dim CuentaF2 As Integer Dim CuentaC As Integer MsgContinuar = MsgBox("Se agruparán las tablas de igual estructura." + _ vbNewLine + vbNewLine + "Desea continuar?", vbYesNo + vbQuestion, "EXCELeINFO") If MsgContinuar = vbNo Then Exit Sub ActiveWorkbook.Sheets.Add Before:=Sheets(1) Sheets(2).Range("A1:G1").Copy Sheets(1).Range("A1") Sheets(1).Range("A2").Select Cuenta = Sheets.Count For i = 2 To Cuenta If Sheets(i).Name <> "EXCELeINFO" And Sheets(i).Name <> "HojaPrueba" Then Set Rango = Sheets(i).Range("A1").CurrentRegion CuentaF = Rango.Rows.Count CuentaC = Rango.Columns.Count Set Rango2 = Sheets(1).Range("A1").CurrentRegion CuentaF2 = Rango2.Rows.Count Rango.Offset(1, 0).Resize(CuentaF - 1, CuentaC).Copy Sheets(1).Cells(CuentaF2 + 1, 1) Set Rango = Nothing Set Rango2 = Nothing Else 'Nada End If Next i Cells.EntireColumn.AutoFit Sheets(1).Name = "Concentrado" End Sub
Descarga el archivo de ejemplo
028 – Práctica 2 – Optimizando macro para Agrupar hojas en una sola.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.