Notifications
Clear all

Número inicial e final - sorteio

3 Posts
1 Usuários
0 Reactions
589 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia a todos!

Tenho esse código que faz sorteio dos números aleatório:

Sub GerarNumerosAleatoriosSemRepeticao()
Dim i                           As Integer
Dim j                           As Integer
Dim bRandomOk                   As Boolean
Dim valor_aleatorio             As Integer
Dim valor_maior                 As Integer
Dim total_numeros_gerados       As Integer
Dim total_numeros_para_gerar    As Integer
Dim iControleGerar              As Integer
Dim iColunaCelula               As Integer

  
    valor_maior = 42   'Informe o maior número que poderá ser gerado
    total_numeros_para_gerar = 01      'Informe a quantidade de números aleatórios que deseja gerar
    total_numeros_gerados = 0
    iLinhaCelulaInicial = 9     'Informe a linha da primeira célula que será escrito o número
    iColunaCelula = 7   'Informe a coluna. Exemplo: Coluna B = 2
    iControleGerar = total_numeros_para_gerar + iLinhaCelulaInicial - 1
    
    'Gera quantos números forem indicados na variável 'total_numeros_gerados'
    For i = iLinhaCelulaInicial To iControleGerar
        total_numeros_gerados = total_numeros_gerados + 1
        
        'Fica executando a geração de um novo número enquanto houver duplicidade
        Do
            'Utilize a condição abaixo para verificar se ainda existem números possíveis a serem gerados
            'Porque se i for maior que o valor limite, significa que todos os números já saíram. Então, sai do loop
            If valor_maior < total_numeros_gerados Then
                valor_aleatorio = 0
                bRandomOk = True
                Exit Do
            End If
            
            'Gera um novo número
            Randomize   'Sempre utilize esta função antes de chamar Rnd
            valor_aleatorio = Int((valor_maior * Rnd) + 1)
            bRandomOk = True
            
            'Verifica se já saiu este número
            For j = iLinhaCelulaInicial To i
                If Cells(j, iColunaCelula).Value = valor_aleatorio Then
                    bRandomOk = False
                    Exit For
                End If
            Next j
            
        Loop While bRandomOk = False
        
        'Escreve o número na célula
        Cells(i, iColunaCelula).Value = valor_aleatorio
    Next i
    
    MsgBox "MESA SORTEADA... Próxima!", vbInformation

End Sub

Tenho o valor_maior = 42 , gostaria de adaptar ao código para começar a contar por exemplo do 15, como se fosse um aleatórioentre(15;42).
E fazer com que quando clicar no botão aparecesse o número em uma célula e o nome em outra .
É possível incluir neste mesmo código?

Desde já obrigado.

Atenciosamente,

Marciel Silva

 
Postado : 12/02/2016 6:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Tenta assim:

Option Explicit

Sub GerarNumerosAleatoriosSemRepeticao()
Dim WSF                         As Excel.WorksheetFunction  'novo objeto para usar AleatórioEntre
Dim i                           As Integer
Dim j                           As Integer
Dim bRandomOk                   As Boolean
Dim valor_aleatorio             As Integer
Dim valor_menor                 As Integer                  'nova variável FF
Dim valor_maior                 As Integer
Dim total_numeros_gerados       As Integer
Dim total_numeros_para_gerar    As Integer
Dim iControleGerar              As Integer
Dim iColunaCelula               As Integer
Dim iLinhaCelulaInicial         As Integer

    Set WSF = Excel.WorksheetFunction
    valor_menor = 15
    valor_maior = 42                    'Informe o maior número que poderá ser gerado
    total_numeros_para_gerar = 10       'Informe a quantidade de números aleatórios que deseja gerar
    total_numeros_gerados = 0
    iLinhaCelulaInicial = 9             'Informe a linha da primeira célula que será escrito o número
    iColunaCelula = 7                   'Informe a coluna. Exemplo: Coluna B = 2
    iControleGerar = total_numeros_para_gerar + iLinhaCelulaInicial - 1
    
    'Gera quantos números forem indicados na variável 'total_numeros_gerados'
    For i = iLinhaCelulaInicial To iControleGerar
        total_numeros_gerados = total_numeros_gerados + 1
        
        'Fica executando a geração de um novo número enquanto houver duplicidade
        Do
            'Utilize a condição abaixo para verificar se ainda existem números possíveis a serem gerados
            'Porque se i for maior que o valor limite, significa que todos os números já saíram. Então, sai do loop
            If valor_maior < total_numeros_gerados Then
                valor_aleatorio = 0
                bRandomOk = True
                Exit Do
            End If
            
            'Gera um novo número
            Randomize   'Sempre utilize esta função antes de chamar Rnd
            valor_aleatorio = Int((WSF.RandBetween(valor_menor, valor_maior)))
            bRandomOk = True
            
            'Verifica se já saiu este número
            For j = iLinhaCelulaInicial To i
                If Cells(j, iColunaCelula).Value = valor_aleatorio Then
                    bRandomOk = False
                    Exit For
                End If
            Next j
            
            VBA.DoEvents    'linha importante nos loops
        Loop While bRandomOk = False
        
        'Escreve o número na célula
        Cells(i, iColunaCelula).Value = valor_aleatorio
        
        VBA.DoEvents    'linha importante nos loops
    Next i
    
    MsgBox "MESA SORTEADA... Próxima!", vbInformation

End Sub
 
Postado : 12/02/2016 8:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Fernando,
Desculpe a demora pelo retorno!

É exatamente isto que estava precisando.
Resolveu minha necessidade.
Obrigado.

Att,

 
Postado : 23/02/2016 1:34 pm