Quero que o código a seguir funcione para qualquer quantidade de elementos. O usuário deve apenas informar quais são os elementos e as combinações devem ser geradas automaticamente para 2, 3, 4, 5, 6, 7 ou qualquer quantidade de elementos que o usuário informar. Em uma caixa de texto o usuário informa a quantidade de elementos, em outra caixa de texto ele informa quais são os elementos, separados por traço. Por exemplo:
Quantidade de elementos: 7
Elementos: AA-BE-FT-CG-UY-WQ-IG.
Também pode ser um código diferente para atender as mesmas necessidades.
Option Explicit
Sub letraspermutadas()
Dim conta, a, b, c, d As Integer
Dim MyTxt(1 To 4) As String
Dim MinhaLista(1 To 24) As String
MyTxt(1) = "MA"
MyTxt(2) = "MD"
MyTxt(3) = "FA"
MyTxt(4) = "F5"
conta = 1
For a = 1 To 4
For b = 1 To 4
For c = 1 To 4
For d = 1 To 4
If IsInArray(MyTxt(a), Array(MyTxt(b), MyTxt(c), MyTxt(d))) Or _
IsInArray(MyTxt(b), Array(MyTxt(a), MyTxt(c), MyTxt(d))) Or _
IsInArray(MyTxt(c), Array(MyTxt(a), MyTxt(b), MyTxt(d))) Or _
IsInArray(MyTxt(d), Array(MyTxt(a), MyTxt(b), MyTxt(c))) Then GoTo ali
MinhaLista(conta) = "1" & MyTxt(a) & "2" & MyTxt(b) & "3" & MyTxt(c) & "4" & MyTxt(d)
conta = conta + 1
ali:
Next
Next
Next
Next
ComboBox1.List = MinhaLista
End Sub
Private Sub UserForm_Initialize()
Call letraspermutadas
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = UBound(Filter(arr, stringToBeFound)) > -1
End Function
Postado : 02/12/2017 9:41 am