Nro aleatorio

Hola, ¿me puedes ayudar?
Desde la celda A6 hasta la A30 necesito generar números aleatorios enteros que estén entre 1 y un número máximo variable (100, 200, o cualquiera), pero que no se repitan
con este código me funciona, pero a veces se repiten algunos números
Sub practica2()
Hoja14.Select
w = Cells(2, 2)
d = Cells(2, 1)
maxB = Cells(2, 3)
Range("C6:C30").ClearContents
Range("A6:A30").ClearContents
Cells(6, 3).Select
For i = 1 To w
    Nrnd = Int((maxB - 1 + 1) * Rnd + 1)
    If Cells(5 + i - 1, 1) = Nrnd Then
      Cells(5 + i, 1) = Int((maxB - 1 + 1) * Rnd + 1)
      GoTo knd
    Else
    Cells(5 + i, 1) = Nrnd
    End If
knd:
Next i
End Sub

1 Respuesta

Respuesta
1
Me he basado en código publicado por Javier Marco y lo he adaptado a tu necesidad. Es un tanto curioso y por ejemplo no declara las variables, cosa que prefiero hacer, pero es correcto.
Sub Main()
   Call Aleatorios_no_repetidos(200)
End Sub
Lo anterior es la llamada al procedimiento indicando que los aleatorios lleguen hasta 200 como máximo
Sub Aleatorios_no_repetidos(maximo As Integer)
'llamamos a la función randomize,
'para que todo funcione correctamente
Randomize
'indicamos el nº máximo y el mínimo
'maximo = dado como parámetro
minimo = 1
For i = 1 To 25 'numeros aleatorios diferentes
'generamos el primer nº aleatorio
registro_obtenido = Int((maximo - minimo + 1) * Rnd + minimo)
'generamos un aleatorio hasta encontrar uno no repetido
Do While InStr(numeros, " " & registro_obtenido & ",") > 0
'lo añadimos al array
registro_obtenido = Int((maximo - minimo + 1) * Rnd + minimo)
Loop
'lo añadimos al array
numeros = numeros & " " & registro_obtenido & ","
Next
'quitamos la última coma
numeros = Mid(numeros, 1, Len(numeros) - 1)
'formamos un array como Dios manda
numeros = Split(numeros, ", ")
'escribiremos los números aleatorios
i = 0
For Each c In Range("a6:a30")
    c.Value = numeros(i)
    i = i + 1
Next c
End Sub

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas