none
Laço de repetição? RRS feed

  • Pergunta

  • Como montar um laço de repetição para gerar as combinações a seguir?

    Option Explicit



    Private Sub UserForm_Initialize()
        Dim TEXTO As String
        Dim I, J As Integer
        Dim ELEMENTO(1 To 4) As String
        ELEMENTO(1) = "MA"
        ELEMENTO(2) = "MD"
        ELEMENTO(3) = "FA"
        ELEMENTO(4) = "F5"
        '  For J = 1 To 4
        '     For I = 1 To 4
        
        
        
        TEXTO = "1" & ELEMENTO(1) & "2" & ELEMENTO(2) & "3" & ELEMENTO(3) & "4" & ELEMENTO(4)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(1) & "2" & ELEMENTO(2) & "3" & ELEMENTO(4) & "4" & ELEMENTO(3)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(1) & "2" & ELEMENTO(3) & "3" & ELEMENTO(4) & "4" & ELEMENTO(2)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(1) & "2" & ELEMENTO(3) & "3" & ELEMENTO(2) & "4" & ELEMENTO(4)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(1) & "2" & ELEMENTO(4) & "3" & ELEMENTO(3) & "4" & ELEMENTO(2)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(1) & "2" & ELEMENTO(4) & "3" & ELEMENTO(2) & "4" & ELEMENTO(3)
        UserForm1.ComboBox1.AddItem (TEXTO)
        
        TEXTO = "1" & ELEMENTO(2) & "2" & ELEMENTO(1) & "3" & ELEMENTO(3) & "4" & ELEMENTO(4)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(2) & "2" & ELEMENTO(1) & "3" & ELEMENTO(4) & "4" & ELEMENTO(3)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(2) & "2" & ELEMENTO(3) & "3" & ELEMENTO(4) & "4" & ELEMENTO(1)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(2) & "2" & ELEMENTO(3) & "3" & ELEMENTO(1) & "4" & ELEMENTO(4)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(2) & "2" & ELEMENTO(4) & "3" & ELEMENTO(3) & "4" & ELEMENTO(1)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(2) & "2" & ELEMENTO(4) & "3" & ELEMENTO(1) & "4" & ELEMENTO(3)
        
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(3) & "2" & ELEMENTO(2) & "3" & ELEMENTO(1) & "4" & ELEMENTO(4)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(3) & "2" & ELEMENTO(2) & "3" & ELEMENTO(4) & "4" & ELEMENTO(1)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(3) & "2" & ELEMENTO(1) & "3" & ELEMENTO(4) & "4" & ELEMENTO(2)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(3) & "2" & ELEMENTO(1) & "3" & ELEMENTO(2) & "4" & ELEMENTO(4)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(3) & "2" & ELEMENTO(4) & "3" & ELEMENTO(1) & "4" & ELEMENTO(2)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(3) & "2" & ELEMENTO(4) & "3" & ELEMENTO(2) & "4" & ELEMENTO(1)
        UserForm1.ComboBox1.AddItem (TEXTO)
        
        TEXTO = "1" & ELEMENTO(4) & "2" & ELEMENTO(2) & "3" & ELEMENTO(3) & "4" & ELEMENTO(1)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(4) & "2" & ELEMENTO(2) & "3" & ELEMENTO(1) & "4" & ELEMENTO(3)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(4) & "2" & ELEMENTO(3) & "3" & ELEMENTO(1) & "4" & ELEMENTO(2)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(4) & "2" & ELEMENTO(3) & "3" & ELEMENTO(2) & "4" & ELEMENTO(1)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(4) & "2" & ELEMENTO(1) & "3" & ELEMENTO(3) & "4" & ELEMENTO(2)
        UserForm1.ComboBox1.AddItem (TEXTO)
        TEXTO = "1" & ELEMENTO(4) & "2" & ELEMENTO(1) & "3" & ELEMENTO(2) & "4" & ELEMENTO(3)
        UserForm1.ComboBox1.AddItem (TEXTO)
        
        
        
        ' Next I
        ' Next J
    End Sub


    A MELHOR FORMA DE AGRADECER É VOTAR COMO ÚTIL OU MARCAR COMO RESPOSTA Anderson Diniz diniabr2011@gmail.com



    quinta-feira, 16 de novembro de 2017 17:35

Respostas

  • 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
    


    A MELHOR FORMA DE AGRADECER E VOTAR COMO UTIL OU MARCAR COMO RESPOSTA Anderson Diniz diniabr2011@gmail.com

    • Marcado como Resposta AndersonFDiniz2 domingo, 26 de novembro de 2017 13:36
    domingo, 26 de novembro de 2017 13:36

Todas as Respostas

  • amigo.

    Qual é o objetivo de colocar em um array e depois mostrar no combo?

    pelo que eu vi é um arranjo de itens 4,3. É isso mesmo?


    terça-feira, 21 de novembro de 2017 20:58
  • O array serve apenas para guardar os elementos na memória.

    1MA2MD3FA4F5

    1MA2FA3MD4F5

    1MA2FA3F54FA

    E assim por diante...

    4 elementos, 4 posições

    total de 24 combinações

    Se der para fazer sem esse array não há problema


    A MELHOR FORMA DE AGRADECER E VOTAR COMO UTIL OU MARCAR COMO RESPOSTA Anderson Diniz diniabr2011@gmail.com




    quarta-feira, 22 de novembro de 2017 02:33
  • Ok

    Dá uma olhada nos posts abaixo:

    https://www.devmedia.com.br/forum/algoritmo-de-arranjo/198148

    https://xlinux.nist.gov/dads/

    Talvez te ajude.

    Abs


    quarta-feira, 22 de novembro de 2017 15:02
  • 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
    


    A MELHOR FORMA DE AGRADECER E VOTAR COMO UTIL OU MARCAR COMO RESPOSTA Anderson Diniz diniabr2011@gmail.com

    • Marcado como Resposta AndersonFDiniz2 domingo, 26 de novembro de 2017 13:36
    domingo, 26 de novembro de 2017 13:36
  • Bom dia

    Você conseguiu resolver o problema?

    Att

    sexta-feira, 1 de dezembro de 2017 11:16