Ola Edson
eu tentei outras alternativas sim mas por vezes o rnd trazia sequencias repetidas em gerações muito grandes
o rand é mais lento mas não teve esse problema tornando até aleatorio demais
em poucas sequencias o rnd não apresenta problemas mas em listagens longas sim , pelo menos para mim apresentou
e olha e a propria macro já tem seu fator aleatorio dentro do aleatorio não escolhendo dezenas diretamente e sim posições onde essas estão
olha a macro aí "perdão pela bagunça fiz ela rapidamente para outra pessoa e acabei perdendo mais tempo no RND "
Sub Escolha_aleatoria()
Dim c2 As Long, nn As Long, Li As Long, L As Long, C As Long, N As Long, Vx As Long, Dmx As Long, N2 As Long, pp As Boolean
Li = 12 'linha inicial de saida
Vx = Range("val_max").Value2 ' maior dezena presente
Dmx = Range("qt_dez").Value2 ' quantidade de dez por grupo
qtlin = Range("qt_lin").Value2 ' quantidade de jogos gerados
qtf = Range("qt_fixas").Value2
If qtf > 0 Then
N = 1
ReDim fixas(1 To qtf) As Long
tab0 = Range("fixas").Value2
For C = 1 To UBound(tab0, 2)
If tab0(1, C) > 0 And tab0(1, C) <= Vx Then
fixas(N) = tab0(1, C)
qtf = N
N = N + 1
N2 = N2 + 1
End If
Next
End If
qt1 = Range("qt_tab_1").Value2
If qt1 > 0 Then
ReDim tab_1(1 To qt1) As Long
tab0 = Range("tab_1").Value2
N = 1
For C = 1 To UBound(tab0, 2)
For L = 1 To UBound(tab0, 1)
If tab0(L, C) > 0 And tab0(L, C) <= Vx Then
tab_1(N) = tab0(L, C)
qt1 = N
N = N + 1
N2 = N2 + 1
End If
Next
Next
End If
qt2 = Range("qt_tab_2").Value2
If qt2 > 0 Then
ReDim tab_2(1 To qt2) As Long
tab0 = Range("tab_2").Value2
N = 1
For C = 1 To UBound(tab0, 2)
For L = 1 To UBound(tab0, 1)
If tab0(L, C) > 0 And tab0(L, C) <= Vx Then
tab_2(N) = tab0(L, C)
qt2 = N
N = N + 1
N2 = N2 + 1
End If
Next
Next
End If
ReDim sorteadas(1 To qtlin, 1 To Dmx)
lf = ULinhaRangeEdcronos("E", "BC")
If lf >= Li Then Range(Cells(Li, 6), Cells(lf, 55)).ClearContents
If N2 < Dmx Then MsgBox "dezenas insuficientes para preencher grupo": Exit Sub
tmn = Range("tb_min").Value2
tmx = Range("tb_max").Value2
If tmn <= tmx And tmx <= qt1 Then pp = True
zxz = 6
For L = 1 To Range("qt_lin").Value2
c2 = 1
Call VBA.Randomize '(10)
If qtf > 0 Then
For C = 1 To qtf 'UBound(fixas)
sorteadas(L, c2) = fixas(C)
c2 = c2 + 1
If c2 > Dmx Then GoTo saida
Next
End If
If zxz < 1 Then zxz = 3 Else zxz = zxz - 1
If qt1 > 0 And pp Then
Z = [rand()]
tt = Int(((tmx - tmn + 1) * ([rand()])) + tmn)
nn = qt1 'UBound(tab_1)
Embaralhador tab_1
dex = tab_1
For d = 1 To nn
volta:
If tt = 0 Then GoTo ttt2
vvv = Int((nn * [rand()]) + 1)
If dex(vvv) = 0 Then
GoTo volta
Else
sorteadas(L, c2) = dex(vvv)
dex(vvv) = 0
c2 = c2 + 1
If c2 > Dmx Then GoTo saida
tt = tt - 1
End If
Next
End If
ttt2:
If qt2 > 0 Then
nn = qt2 'UBound(tab_2)
Embaralhador tab_2
dex = tab_2
tt = nn
For d = 1 To nn
volta2:
vvv = Int((nn * [rand()]) + 1)
If dex(vvv) = 0 Then
GoTo volta2
Else
sorteadas(L, c2) = dex(vvv)
dex(vvv) = 0
c2 = c2 + 1
If c2 > Dmx Then GoTo saida
tt = tt - 1
If tt = 0 Then GoTo saida
End If
Next
End If
saida:
Next
Range("f" & Li, Cells(UBound(sorteadas, 1) + Li - 1, Dmx + 5)) = sorteadas
End Sub
Postado : 23/07/2017 4:36 pm