Macro excel asignacion de numeros aleatorios

Hola a todos

Tengo esta macro para asignar numero no repetitivos para sorteos y demás.

Sub asignar_numeros()
'modificar este numero con el numero de participantes
    Const Numeros As Long = 20
    Const Salida As String = "c1"
    With Range(Salida).Resize(Numeros)
        .Formula = "=rand()"
        .Value = Evaluate("index(rank(" & .Address & "," & .Address & ",1),0)")
    End With
End Sub

pero necesito que el numero de participantes lo designe un valor de una celda (por ejemplo la E4), no un valor escrito en el propio codigo.

¿Me podéis ayudar?

Gracias de antemano

2 Respuestas

Respuesta

En vez de Numeros debes usar el contenido de esa celda, esta es la forma más sencilla, poniendo[E4] en el lugar de Numeros

Sub asignar_numeros()
'modificar este numero con el numero de participantes
  ' Const Numeros As Long = 20
    Const Salida As String = "c1"
    With Range(Salida).Resize([E4])
        .Formula = "=rand()"
        .Value = Evaluate("index(rank(" & .Address & "," & .Address & ",1),0)")
    End With
End Sub

Puedes comentar o quitar la declaración de la constante Numeros porque ya no hace falta.

Y eso es todo.

Respuesta

sirgfreid
En el siguiente enlace: Números_aleatorios.xlsm encontrarás dos métodos para obtener lo mismo:
- El primero de ellos es -precisamente- el que tú has publicado, con más la consideración solicitada y un pequeño ajuste: Borrar las celdas a utilizar antes que nada.
Este método tiene como bueno que es de programación sencilla. Sin embargo tiene como contra que no es el más eficiente por basarse en una doble imputación de fórmulas en las celdas (ALEATORIO y JERARQUIA).
- El segundo método mostrado es -aproximadamente- unas 10 veces más ràpido por basarse en el objeto Colection y trabajar todo en memoria.
Naturalmente y si los números a generar son pocos, la diferencia de tiempo (en el orden de las décimas de segundo) son imperceptibles.

Añade tu respuesta

Haz clic para o