Se debe tener presente que las macros nos va permitir realizar las permutaciones con números y con letras.
¿COMO GENERAR PERMUTACIONES EN EXCEL CON MACROS?
Con estas dos macro nos va permitir realizar lo siguiente:
- Realizar todas las permutaciones posibles con números
- Realizar todas las permutaciones posibles con letras
Revisa los dos videos para que aprendas a utilizar las dos macros y en la parte inferior del articulo se encuentra el enlace para que la puedas descargar
Video parte #1 - permutaciones con números
Video parte #2 - permutaciones con letras
Importante que para utilizar la macro debemos de tener habilitados el menú de programador o desarrollador dependiendo de la versión de excel que tengas. En este corto video te explico como lo puedes habilitar
Es muy importante tener en esquema por orden de la información donde está un consecutivo del total de las combinaciones y la otra columna donde van a parecer las combinaciones.
Como se muestra en la imagen, en la columna A colocamos los números que vamos a realizar la permutación que sería 4 números luego en la celda D y F estaran las permutaciones para el ejemplo sera de un tamaño de 3 permutaciones y en la celda I1 la cantidad del total de permutaciones que para el ejemplo daría 64 permutaciones. Se debe tener presente que para calcular la cantidad de permutaciones se debe tomar la cantidad de números y elevarlo al tamaño de cada permutación, es decir que para el ejemplo son 4 números y tamaño 3 entonces la formula quedaría 4^3 = 64
y arrastramos con el mouse el tamaño como queremos el botón.
Luego nos ubicamos botón y presionamos clic derecho asignar macro y ahí le podemos asignar un nombre a la macro y le decimos nuevo
Luego copiamos la macro que se encuentra al final de esta pagina.
En el momento de ejecutar la macro te sale un primer cuadro donde debemos de escribir el número de dígitos que tendrá cada permutación, para el ejemplo va ser 3 y presionamos aceptar.
Luego nos arroja la siguiente mensaje digita el número de la fila donde esta el primer caracter o número y sería la fila 2 y presionamos aceptar
Luego nos arroja la siguiente mensaje digita el número de la fila donde esta el ultimo caracter o número y sería la fila 5 y presionamos aceptar
Luego nos arroja la siguiente mensaje digita el número de la fila donde comenzara la primera combinación menos 1 ejemplo: la fila 2 comienza la primera permutación y se le resta el #1, el valor que digito es el 1 y para el ejemplo la permutación comienza en el 2 y le restamos uno sería 1 y aceptar
Luego nos aparece la siguiente ventana digita el número de la columna donde comenzara la primera permutación, ejemplo si la columna C se escribe el número 3, para el ejemplo sería la columna D entonces escribimos el número 4 y presionamos aceptar.
En el siguiente mensaje nos aparece digite el número que desea cada lote de permutaciones, si no quiere por lotes escribe el número 0, esta opción se utiliza cuando hay muchas permutaciones por ejemplo 1 millon de permutaciones entonces se escribe de cuantas permutaciones inicia el siguiente lote. para el ejemplo escribimos 0
Y la macro nos empieza a realizar todas las permutaciones posibles en nuestra hoja de excel.
La macro consiste en lo siguiente.
Dim inicio As Integer
Dim limite As Integer
Dim fila As Double
Dim digitos As Integer
Dim columna As Integer
Dim lote As Integer
Le asignamos para cada variable la caja de texto para que ingresen los valores.
digitos = InputBox("Digita la cantidad de digitos que tendra cada preposición", "CANTIDAD DE DIGITOS")
inicio = InputBox("Digita el número de la fila donde esta el primer caracter o número", "FILA LIMITE")
limite = InputBox("Digita el número de la fila donde esta el ultimo caracter o número", "FILA LIMITE")
fila = InputBox("Digita el número de la fila donde comenzara la primera combinación menos 1, Ejemplo: La fila 2 comienza la primera combinación y se le resta el # 1, el valor que digito es el 1", "FILA INICIAL")
columna = InputBox("Digita el número de la Columna donde comenzara la primera combinación, Ejemplo si la columna es C se escribe el número 3", "COLUMNA INICIAL")
lote = InputBox("Digita el número que desee cada lote de combinaciones, si no quieres por lotes escribe el número 0", "LIMITE DE CADA LOTE")
Se raliza un ciclo con for para dos digitos
'PARA DOS DIGITOS
If digitos = 2 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
fila = fila + 1
Algoritmo para cada lote, se utiliza para preposiciones superiores a 60.000 o al gusto
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 3
fila = 1
End If
Next dato2
Next dato1
End If
inicio = InputBox("Digita el número de la fila donde esta el primer caracter o número", "FILA LIMITE")
limite = InputBox("Digita el número de la fila donde esta el ultimo caracter o número", "FILA LIMITE")
fila = InputBox("Digita el número de la fila donde comenzara la primera combinación menos 1, Ejemplo: La fila 2 comienza la primera combinación y se le resta el # 1, el valor que digito es el 1", "FILA INICIAL")
columna = InputBox("Digita el número de la Columna donde comenzara la primera combinación, Ejemplo si la columna es C se escribe el número 3", "COLUMNA INICIAL")
lote = InputBox("Digita el número que desee cada lote de combinaciones, si no quieres por lotes escribe el número 0", "LIMITE DE CADA LOTE")
Se raliza un ciclo con for para dos digitos
'PARA DOS DIGITOS
If digitos = 2 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
fila = fila + 1
Algoritmo para cada lote, se utiliza para preposiciones superiores a 60.000 o al gusto
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 3
fila = 1
End If
Next dato2
Next dato1
End If
Se realiza un ciclo con for para tres digitos
'PARA TRES DIGITOS
If digitos = 3 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 4
fila = 1
End If
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para cuatro dígitos
'PARA CUATRO DIGITOS
If digitos = 4 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 5
fila = 1
End If
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para cinco dígitos
'PARA CINCO DIGITOS
If digitos = 5 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 6
fila = 1
End If
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para seis digitos
'PARA TRES DIGITOS
If digitos = 3 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 4
fila = 1
End If
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para cuatro dígitos
'PARA CUATRO DIGITOS
If digitos = 4 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 5
fila = 1
End If
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para cinco dígitos
'PARA CINCO DIGITOS
If digitos = 5 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 6
fila = 1
End If
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para seis digitos
'PARA SEIS digitos
If digitos = 6 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 7
fila = 1
End If
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para siete digitos
If digitos = 6 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 7
fila = 1
End If
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para siete digitos
'PARA SIETE DIGITOS
If digitos = 7 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
For dato7 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
Cells(fila + 1, columna + 6) = Cells(dato7, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 8
fila = 1
End If
Next dato7
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para ocho digitos
'PARA OCHO DIGITOS
If digitos = 8 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
For dato7 = inicio To limite
For dato8 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
Cells(fila + 1, columna + 6) = Cells(dato7, 1)
Cells(fila + 1, columna + 7) = Cells(dato8, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 9
fila = 1
End If
Next dato8
Next dato7
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para nueve dígitos
'PARA NUEVE DIGITOS
If digitos = 9 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
For dato7 = inicio To limite
For dato8 = inicio To limite
For dato9 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
Cells(fila + 1, columna + 6) = Cells(dato7, 1)
Cells(fila + 1, columna + 7) = Cells(dato8, 1)
Cells(fila + 1, columna + 8) = Cells(dato9, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 10
fila = 1
End If
Next dato9
Next dato8
Next dato7
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
En el siguiente ENLACE puedes DESCARGAR la macro para combinaciones con repetición.
If digitos = 7 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
For dato7 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
Cells(fila + 1, columna + 6) = Cells(dato7, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 8
fila = 1
End If
Next dato7
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para ocho digitos
'PARA OCHO DIGITOS
If digitos = 8 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
For dato7 = inicio To limite
For dato8 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
Cells(fila + 1, columna + 6) = Cells(dato7, 1)
Cells(fila + 1, columna + 7) = Cells(dato8, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 9
fila = 1
End If
Next dato8
Next dato7
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
End If
Se realiza un ciclo con for para nueve dígitos
'PARA NUEVE DIGITOS
If digitos = 9 Then
For dato1 = inicio To limite
For dato2 = inicio To limite
For dato3 = inicio To limite
For dato4 = inicio To limite
For dato5 = inicio To limite
For dato6 = inicio To limite
For dato7 = inicio To limite
For dato8 = inicio To limite
For dato9 = inicio To limite
Cells(fila + 1, columna) = Cells(dato1, 1)
Cells(fila + 1, columna + 1) = Cells(dato2, 1)
Cells(fila + 1, columna + 2) = Cells(dato3, 1)
Cells(fila + 1, columna + 3) = Cells(dato4, 1)
Cells(fila + 1, columna + 4) = Cells(dato5, 1)
Cells(fila + 1, columna + 5) = Cells(dato6, 1)
Cells(fila + 1, columna + 6) = Cells(dato7, 1)
Cells(fila + 1, columna + 7) = Cells(dato8, 1)
Cells(fila + 1, columna + 8) = Cells(dato9, 1)
fila = fila + 1
If fila = lote Then 'Limite del lote de cada preposición
columna = columna + 10
fila = 1
End If
Next dato9
Next dato8
Next dato7
Next dato6
Next dato5
Next dato4
Next dato3
Next dato2
Next dato1
Seguramente quieres sabes más acerca de Excel, no te olvides darte una vuelta por las siguientes secciones disponibles para ti de manera gratuita:
Canal de YouTube
Comunicad Telegram
Instagram: Aprende y Enseña Excel
Facebook: Aprende Excel Fácil
Twitter: Aprende y Enseña Excel
Hasta una próxima y te deseo el mayor de los EXITOS.
Aprende y Enseña Excel.