Como poner 1600 números aleatorios sin repetir

Hola, necesito poner en 40 filas por 40 columnas 1600 números, del 1 al 1600, ambos inclusive, y no doy con la fórmula.
He probado con aleatorio, aleatorio entre etc..., y siempre me repite números, un montón además...
Otra opción sería, que tras generar esos números aleatorios, ¿cómo podría ordenarlos para así ver los que están repetidos y aunque sea un tostón ir metiendo a "pinrrel" los que faltan y quitar los repetidos?
Gracias!

1 Respuesta

Respuesta
1
Public Sub DistribuciónAleatoriaEnUnRango()
Dim col1 As New Collection, col2 As New Collection
Dim lngElem As Long
Dim n As Long
Application.ScreenUpdating = False
For n = 1 To 1600
col1.Add n
Next n
For n = col1.Count To 1 Step -1
lngElem = Int(n * Rnd + 1)
col2.Add col1(lngElem)
col1.Remove lngElem
Next n
For n = 1 To col2.Count
Worksheets("Hoja1").Cells(n, 1) = col2(n) 'Hoja y celdas donde se volcará el resultado (Hoja1!A1:A100)
Next n
Application.ScreenUpdating = True
End Sub
Este procedimiento pondrá los números en la columna A de Hoja1, así que para evitar problemas lo mejor es situarlo y ejecutarlo en un libro nuevo.
Hola!
Muchas gracias por la contestación...
¿Para un novato podrías decirme por donde empezar?
Yo , poner fórmulas tipo = aleatorio(), o = sumar, restar, logaritomos, etc... sin problemas, pero esto...., creo que me queda grande.
¿Dónde tengo que escribirlo?
Saludos!
Tienes que poner el código en un módulo VBA y ejecutarlo, para lo cual:
- Crea un libro nuevo
- Pulsa Alt F11 para entrar en el editor de VBA
- Insertar->Módulo
- En la ventana de código (la más grande) pega lo siguiente:
Public Sub DistribuciónAleatoriaEnUnRango()
Dim col1 As New Collection, col2 As New Collection
Dim lngElem As Long
Dim n As Long, j As Long
Application.ScreenUpdating = False
For n = 1 To 1600
col1.Add n
Next n
For n = col1.Count To 1 Step -1
lngElem = Int(n * Rnd + 1)
col2.Add col1(lngElem)
col1.Remove lngElem
Next n
lngElem = 1
For n = 1 To 40
For j = 1 To 40
Worksheets("Hoja1").Cells(n, j).Value = col2(lngElem)
lngElem = lngElem + 1
Next j
Next n
Worksheets("Hoja1").Columns.AutoFit
Application.ScreenUpdating = True
End Sub
- Ejecuta el código situándote sobre cualquier línea y pulsando F5
He modificado un poco el código que puse antes para que la distribución aleatoria no sea volcada en A1:A1600 sino en A1:AN40 (40 filas*40 columnas).
Si todo va bien (es decir, si están los 1.600 números desde 1 al 1.600, sin repeticiones), la suma de las celdas será siempre 1.280.800 y su promedio 800,5
Ten en cuenta que cada vez que ejecutes el código se borrarán los datos anteriores en el rango A1:AN40 de Hoja1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas