Macro para crear grupos de filas con la misma cantidad de registros en Excel
La macro que en este artículo les comparto tiene como objetivo crear x número de grupos con x número de columnas, por ejemplo, si tenemos un listado de 50,000 filas con datos, hacer asignaciones por lotes o grupos, pero en lugar de hacerlo de manera manual que haya un Inputbox que nos pregunte la cantidad de grupos y registros.
Uso de la macro
Decidí crear esta macro, ya que un usuario del Blog planteó la necesidad de separar un listado de números telefónicos en lotes de 7,000 números y hacer un archivo independiente por cada lote.
Figura 1. 50,000 de quieren dividir en lotes de 7,000 cada uno.
Cómo funciona
Haremo uso de mensajes Inputbox que almacenarán la cantidad de grupos que se crearán y cuántos registros tomará para cada uno de esos grupos.
Además, si en la celda seleccionada existe ya un dato previo o la celda está oculta, no la tomará en cuenta y se brincará a la siguiente.
Ejemplo
En la figura 1, tenemos 50,000 registros, lo cuales vamos a hacer 5 grupos de 10,000 números cada uno. Nos posicionamos en la celda B2 y corremos la macro.
Figura 2. Cada grupo tendrá 10,000 registros.
Figura 3. Se harán 5 grupos de 10,000 registros.
Se guardarán las variables de registros y grupos y Excel comenzará con un ciclo For Next a llenar el nombre en la columna B, comenzando con el nombre de Grupo 1, Grupo 2 y así sucesivamente.
Figura 4. Con una tabla dinámica vemos los 5 grupos creados y sus respectivos registros.
Código vba
Option Explicit Const Titulo = "EXCELeINFO" ' '--------------------------------------------------------------------------------------- ' Procedure : CrearGrupos ' Author : MVP, Sergio Campos ' Date : 01/11/2013 ' Purpose : Crear grupos de filas '--------------------------------------------------------------------------------------- ' Sub CrearGrupos() ' Declaración de variables Dim intGrupos As Integer Dim intRegistros As Integer Dim intGrupo As Integer Dim i As Integer Dim j As Integer ' On Error GoTo Handler ' 'Guardar cantidad de regitros x grupo intRegistros = InputBox("De cuántos números quieres los Grupos?", Titulo) intGrupos = InputBox("Cuántos intGrupos de " & intRegistros & " quieres crear?", Titulo) ' ' Application.ScreenUpdating = False ' intGrupo = 1 ' 'Ciclo for para llenar celdas For i = 1 To intGrupos For j = 1 To intRegistros If ActiveSheet.Rows(ActiveCell.Row).Hidden Or ActiveCell.Value <> "" Then ActiveCell.Offset(1, 0).Select 'En caso de no aplicar en la celda activa, el valor de j 'se reduce en 1 j = j - 1 Else ActiveCell = "Grupo " & intGrupo ActiveCell.Offset(1, 0).Select End If Next j intGrupo = intGrupo + 1 Next i ' Application.ScreenUpdating = True ' Exit Sub ' 'En caso de detectar algún error... Handler: MsgBox Err.Description, vbExclamation, Titulo ' End Sub
Otros artículos similares
Macro para obtener números de varias series numéricas en Excel