Página 1 de 1

Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 12:36
por luizpaps
Boa tarde pessoal, estava precisando de uma macro para fazer simulações da LotoMania, preciso que gere 20 números de 0 a 100 sem repetição, vasculhando a internet achei essa macro, o único probema é que ela nunca sorteia o número "0" zero, já fiz mais de 1000 sorteios com ela e em nenhuma vez saiu o nº 0, alguém se prontifica a me ajudar?
Código: Selecionar todos
Sub SorteioLotoMania()
Dim V() 'Vetor
Dim CONT As Integer 'Contador
Dim I As Integer 'Índice do vetor
Dim QUANT_SORT As Integer 'Recebe o valor de quantos Nº aleatórios serão gerados
Dim NUM_SORT As Integer 'Recebe um número sorteado
Dim LIN As Integer 'Determina em que linha o Nº aleatório será colocado
Dim REP As Integer 'Repetidor
Dim VAL_MIN As Integer 'Recebe o valor mínimo na faixa de números
Dim VAL_MAX As Integer 'Recebe o Valor máximo na faixa de números
Dim FAIXA_SORT As Integer 'Faixa de valores possíveis ao sorteio
 
On Error GoTo SAIDA
INICIO:
 
VAL_MIN = 0
VAL_MAX = 100
 
CHECA_VALOR_MAX:
 
 
FAIXA_SORT = VAL_MAX - VAL_MIN
 
QUANT_SORT = 20
 
 
Randomize
For LIN = 1 To QUANT_SORT
    I = I + 1
    ReDim Preserve V(I)
REPETE:
    NUM_SORT = Int(Rnd * VAL_MAX + VAL_MIN)
    REP = 0
For CONT = I - LIN To I
    If NUM_SORT = V(CONT) Or NUM_SORT > VAL_MAX Then
        REP = 1
    End If
Next
If REP = 1 Then
GoTo REPETE
Else
V(I) = NUM_SORT
End If
Next
I = 0
For LIN = 1 To QUANT_SORT
I = I + 1
ActiveCell.Value = V(I)
ActiveCell.Offset(0, 1).Activate
Next LIN
ActiveCell.Offset(1, -20).Activate
SAIDA:
End Sub


Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 12:40
por FelipeAguiar
Boa tarde Luizpaps,
Experimente mudar o a seguinte linha:
Código: Selecionar todos
VAL_MIN = 0
para:
Código: Selecionar todos
VAL_MIN = 1

Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 13:57
por luizpaps
FelipeAguiar, mudei aqui, mas não funcionou, fiz pelo menos 100 sorteios e em nenhum deles o número zero foi sorteado

Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 14:25
por FelipeAguiar
Fiz uma pequena alteração perto do final, que verifica se o numero é igual a zero, se for, ele irá somar + 1 para ir para o próximo valor válido.

trecho alterado:
Código: Selecionar todos
If NUM_SORT = 0 Then
    NUM_SORT = NUM_SORT + 1
End If

Código completo:
Código: Selecionar todos
Sub SorteioLotoMania()
Dim V() 'Vetor
Dim CONT As Integer 'Contador
Dim I As Integer 'Índice do vetor
Dim QUANT_SORT As Integer 'Recebe o valor de quantos Nº aleatórios serão gerados
Dim NUM_SORT As Integer 'Recebe um número sorteado
Dim LIN As Integer 'Determina em que linha o Nº aleatório será colocado
Dim REP As Integer 'Repetidor
Dim VAL_MIN As Integer 'Recebe o valor mínimo na faixa de números
Dim VAL_MAX As Integer 'Recebe o Valor máximo na faixa de números
Dim FAIXA_SORT As Integer 'Faixa de valores possíveis ao sorteio
 
On Error GoTo SAIDA
INICIO:
 
VAL_MIN = 0
VAL_MAX = 100
 
CHECA_VALOR_MAX:
 
 
FAIXA_SORT = VAL_MAX - VAL_MIN
 
QUANT_SORT = 20
 
 
Randomize
For LIN = 1 To QUANT_SORT
    I = I + 1
    ReDim Preserve V(I)
REPETE:
    NUM_SORT = Int(Rnd * VAL_MAX + VAL_MIN)
    REP = 0
For CONT = I - LIN To I
    If NUM_SORT = V(CONT) Or NUM_SORT > VAL_MAX Then
        REP = 1
    End If
Next
If REP = 1 Then
GoTo REPETE
Else


If NUM_SORT = 0 Then
    NUM_SORT = NUM_SORT + 1
End If
    
    
V(I) = NUM_SORT


End If
Next
I = 0
For LIN = 1 To QUANT_SORT
I = I + 1
ActiveCell.Value = V(I)
ActiveCell.Offset(0, 1).Activate
Next LIN
ActiveCell.Offset(1, -20).Activate
SAIDA:
End Sub


Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 14:53
por luizpaps
não sei se você entendeu minha solicitação, essa macro que enviei sorteia números de 1 a 100, no entanto precisaria que ela sorteasse também o número zero, o que não aconteceu nem com suas modificações, em nenhum dos 100 sorteios que fiz foi sorteado o número zero, no entanto é necessário pois a lotomania tem o número zero

Re: Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 15:46
por luizpaps
simplifiquei a macro, mas ainda não encontrei a solução para sortear o número zero
essa macro faz 100 sorteios de 20 números que vão de 1 a 100, mas eu preciso que comece de 0 a 100
Código: Selecionar todos
Sub SorteioLotoMania()
Dim V() 'Vetor
Dim NUM_SORT As Integer 'Recebe um número sorteado

For I = 1 To 100
Randomize
For c = 1 To 20
    ReDim Preserve V(c)
    NUM_SORT = Int(Rnd * 100 + 1)
    V(c) = NUM_SORT
Next

For c = 1 To 20
    ActiveCell.Value = V(c)
    ActiveCell.Offset(0, 1).Activate
Next
ActiveCell.Offset(1, -20).Activate
Next I
End Sub

Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 09 Mai 2016 às 16:27
por AndersonLeal
Olá,

Para sortear também o número zero troque esta linha:

NUM_SORT = Int(Rnd * 100 + 1)

por esta:

NUM_SORT = Int(Rnd * 100)

Abraço!

PS: Este último código que vc reescreveu não

Re: Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 10 Mai 2016 às 09:45
por luizpaps
Funcionou, só que descobri outro problema nessa macro, ela está gerando números repetidos

Re: Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 10 Mai 2016 às 16:09
por AndersonLeal
Olá,

Fiz algumas melhorias em seu código e agora está funcionando.

Dê uma olhada.

Abraço.

Gerar números aleatórios entre 0 e 100 sem repetição

Enviado: 11 Mai 2016 às 07:59
por luizpaps
AndersonLeal, muito obrigado, ficou perfeita.