En este post publico una rutina de Vb (macro) que permite hacerlo, pero me apresuro a aclarar que el código no es de mi autoría. El código fue publicado por John Walkenbach en esta página y él a su vez aclara que no conoce el autor del algoritmo.
Entrando más en tema, todas la permutaciones posibles de un grupo de un conjunto de elementos (números o letras) está dado por el factorial de ese número. Por ejemplo, a partir del número 123 se pueden crear seis combinaciones(=FACT(3)=6):
- 123
- 132
- 213
- 231
- 312
- 321
El número de permutaciones crece violentamente con el número de elementos, como puede verse en esta tabla (calculada con la función FACT):
Por este motivo el código permite calcular las permutaciones de hasta 8 elementos.
Los resultados aparecen siempre a partir de la celda A1 de la hoja activa.
Para obtener las permutaciones activamos la rutina GetString, que comprueba si el texto ingresado tiene más de 1 caracter o menos de 9, y luego llama a la rutina GetPermutation.
Option Explicit
Dim CurrentRow
Sub GetString()
Dim InString As String
InString = InputBox("Ingrese el numero o texto")
If Len(InString) < 2 Then Exit Sub
If Len(InString) >= 8 Then
MsgBox "Demasiadas permutaciones"
Exit Sub
Else
ActiveSheet.Columns(1).Clear
CurrentRow = 1
Call GetPermutation("", InString)
End If
End Sub
Sub GetPermutation(x As String, y As String)
' Algoritmo de autor desconocido
Dim i As Integer, j As Integer
j = Len(y)
If j < 2 Then
Cells(CurrentRow, 1) = x & y
CurrentRow = CurrentRow + 1
Else
For i = 1 To j
Call GetPermutation(x + Mid(y, i, 1), _
Left(y, i - 1) + Right(y, j - i))
Next
End If
End Sub