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.

Separa lotes en Excel

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.

Grupos en Excel

Figura 2. Cada grupo tendrá 10,000 registros.

Grupos en Excel (2)

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.

Grupos en Excel (3)

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

Uso de For each … Next en vba Excel

You may also like...