Notifications
Clear all

Trocar números por letras?

6 Posts
2 Usuários
0 Reactions
1,579 Visualizações
(@klarc28)
Posts: 0
New Member
Topic starter
 

Tenho um código que faz permutações entre números, eu quero fazer o mesmo com letras:

        Public Sub EnumeraValores(ByVal index As Integer)
        ' Verifica se existe qualquer valores
        If index > NumeroValores Then
            ' Todos os valores são usados
            ' Obtem uma string para a solução
            Dim resultado As String
            resultado = ""
            Dim i As Integer
            For i = 1 To NumeroValores
                resultado = resultado & Format$(m_SolucaoAtual(i)) & " "
            Next i
            ' Inclui a solução a lista
            UserForm1.lstResultados.AddItem (resultado)
            Exit Sub
        End If
        ' Examina cada valor
        For i = 1 To NumeroValores
            ' Verifica se o valor ja foi usado
            If Not m_Usado(i) Then
                ' Se nao foi usado tente usá-lo
                m_Usado(i) = True
                m_SolucaoAtual(index) = i
                EnumeraValores (index + 1)
                m_Usado(i) = False
            End If
        Next i
    End Sub

    Public Function Factorial(ByVal num As Long) As Long
        Dim resultado As Long
        Dim i As Integer
        resultado = 1
        For i = 2 To num
            resultado = resultado * i
        Next i
        Factorial = resultado
    End Function
 
Postado : 08/12/2017 10:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia

Como você é novato, Para facilitar a tua participação, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

Quanto a dúvida, no site do link abaixo tem um UDF que faz o que você deseja:

https://stackoverflow.com/questions/388 ... ers-in-vba

[]s
Patropi - Moderador

 
Postado : 09/12/2017 6:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se é isto, adaptei a rotina do link abaixo referente a Combinações possíveis, serve tanto para letras, números ou alfanumérico.
List All Possible Combinations - https://www.extendoffice.com/documents/ ... tions.html

Combinações Possíveis

[]s

 
Postado : 09/12/2017 6:29 am
(@klarc28)
Posts: 0
New Member
Topic starter
 

Perfeito, Mauro. Muito obrigado. Agora eu quero outro código que faça essa permutação com letras da seguinte forma:

Pode ser mais de uma letra agrupada, por exemplo:

abc, def, ghi, jkl

Então preciso que o código identifique através de vírgula os grupos de letras que serão permutados.

É muito parecido, só que em vez de a, deve considerar abc, em vez de b, deve considerar def, em vez de c, deve considerar ghi, em vez de d, deve considerar jkl.

Em vez de permutar: abcd, acdb etc.

Ficaria abcdefghijkl, abcghijkldef etc.

Mas nem sempre serão 3 letras agrupadas, por isso preciso que identifique através de vírgula.

Fiz algumas modificações no código, mas ainda não deu certo:

'Fonte
''https://www.extendoffice.com/documents/excel/3657-excel-generate-all-permutations.html
'Adaptação Mauro Coutinho

Option Explicit
Dim sQde As Long

Private Sub btn_Calcular_Click()
    Call GetString
    txtCombinations.Text = sQde
End Sub

Sub GetString()
'Updateby Extendoffice 20160606
    Dim xStr As String
    Dim FRow As Long
    Dim xScreen As Boolean
    Dim matriz As String
    Dim qtd, ext As Integer
    xScreen = Application.ScreenUpdating
    Application.ScreenUpdating = False
    
    xStr = txtNumeroItens.Text
    
    If Len(xStr) < 2 Then
    Exit Sub
       ' If Len(xStr) >= 8 Then
          '  MsgBox "Too many permutations!", vbInformation, "Kutools for Excel"
       ' Exit Sub
    Else
     
        lstResultados.Clear
        FRow = 1
        ext = InStr(1, xStr, ",") - 1
        qtd = UBound(Split(xStr, ",")) + 1
        Call GetPermutation("", xStr, FRow, qtd, ext)
    End If
    Application.ScreenUpdating = xScreen
End Sub

Sub GetPermutation(Str1 As String, Str2 As String, ByRef xRow As Long, ByVal xLen As Integer, ByVal ext As Integer)
    Dim i As Integer
   ' xLen = Len(Str2)
    
    If xLen < 2 Then
    
        UserForm1.lstResultados.AddItem Str1 & Str2
        
        xRow = xRow + 1
    Else
        For i = 1 To xLen
            Call GetPermutation(Str1 + Mid(Str2, i, ext), Left(Str2, ext + i - 1) + Replace(Replace(Right(Str2, ext + xLen - i), ",", ""), " ", ""), xRow, xLen, ext)
        Next
        sQde = xRow - 1
        sQde = sQde
    End If
End Sub


 
Postado : 09/12/2017 9:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se você tivesse acessado e lido os links que postei na minha resposta anterior, saberia que não é permitido criar mais de um tópico para a mesma dúvida.

Patropi _ Moderador

 
Postado : 09/12/2017 10:26 am
(@klarc28)
Posts: 0
New Member
Topic starter
 

Consegui. Muito obrigado pela colaboração de todos.

 
Postado : 10/12/2017 9:47 am