Cómo asignar valores aleatorios a 5 variables que no se repitan

Tengo cinco variables a las que tengo que asignar valores aleatorios del 1 al 5. ¿Cómo lo hago para que los valores no se repitan? Es decir:

a(1)=3
a(2)=1
a(3)=4
a(4)=2
a(5)=5

1 respuesta

Respuesta
3

Puedes hacerlo de varias formas:

1º/ Usando una colección:

Dim i As Integer
Set A = New Collection
Dim temp As Integer
Randomize
Do Until A.Count = 5  'Aquí el número de elementos (tus variables) que quieres obtener
    temp = Int(5 * Rnd) + 1  'Con esta linea generas un número entre 1 y 5
    On Error Resume Next
    A.Add temp, CStr(temp)
    On Error GoTo 0
Loop

Para recuperar el valor de los elementos de la colección, por ejemplo para asignarlo a un cuadro de texto, harías:

Me.CuadroTexto1=A(1)

Me.CuadroTexto2=A(2)

y así sucesivamente.

2º/ Usando una matriz o Array:

Dim i As Integer, j As Integer
Dim A(1 To 5) As Integer  'Aquí indicas el número de elemento de tu matriz (tus variables)
Dim temp As Integer
Randomize
A(1) = Int(5 * Rnd) + 1
For i = 2 To 5
Genera:
    temp = Int(5 * Rnd) + 1
    For j = 1 To i - 1
        If A(j) = temp Then
            GoTo Genera
        Else
            A(i) = temp
        End If
    Next j
Next i

De nuevo, para recuperar el valor de los distintos elementos de la matriz harías:

Me.CuadroTexto1=A(1)

Me.CuadroTexto2=A(2)

3º/ Hacerlo "a las bravas", con 5 variables:

Dim a1 As Integer, a2 As Integer, a3 As Integer, a4 As Integer, a5 As Integer
Randomize
a1 = Int(5 * Rnd) + 1
Do
    a2 = Int(5 * Rnd) + 1
Loop Until a1 <> a2
Do
    a3 = Int(5 * Rnd) + 1
Loop Until a1 <> a3 And a2 <> a3
Do
    a4 = Int(5 * Rnd) + 1
Loop Until a1 <> a4 And a2 <> a4 And a3 <> a4
Do
    a5 = Int(5 * Rnd) + 1
Loop Until a1 <> a5 And a2 <> a5 And a3 <> a5 And a4 <> a5

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas