Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
#10473
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

#10479
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

#10480
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
#10481
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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord