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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
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
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Fernando,
Desculpe a demora pelo retorno!
É exatamente isto que estava precisando.
Resolveu minha necessidade.
Obrigado.
Att,
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel