Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

Sorteo en Excel con Macros

| Sin comentarios

En Excel contamos con números aleatorios que nos pueden servir para cambiar el orden de un conjunto de números al azar, sortear la entrega de elementos, ya se considerando repeticiones (algunos afortunados en el sorteo pueden recibir más de un regalo), y sin considerar repeticiones (cada persona puede recibir un máximo de un regalo).

 

Sorteo - desordenar datos en Excel 

Asumamos  que tenemos una lista de personas en una hoja de Excel, en alguna columna disponible podemos colocar la función "aleatorio" tal como se muestra en la siguiente imagen.

Desordenar datos en Excel

Luego de ello podemos aplicar lo mismo para todas las filas, ya sea haciendo doble click en el controlador de relleno, arrastrando el controlador de relleno, o simplemente copiando la fórmula al resto de líneas.

Tomando en cuenta que la función "Aleatorio" simplemente nos entrega números al azar, podemos usar F9 para cambiar estos números las veces que sea necesario, y finalmente ordenar en base al a columna "orden". 

Para efectos del sorteo podemos considerar los primeros elementos luego de ejecutado el ordenamiento.

Sorteo con VBA en Excel

Si ya tenemos experiencia en el uso de VBA, podemos resolver situaciones más complejas como por ejemplo una en la que preguntemos el número de regalos a ser distribuidos para luego ir distribuyendo cada uno de los regalos entre los participantes.

Sorteo con repeticiones 

Para el mismo conjunto de datos asumamos que cada persona puede recibir uno o más regalos. Examinemos el siguiente código: 

Sub sorteo1()

cantidad = InputBox("ingrese cantidad", "Título")

ult = Cells(Rows.Count, 1).End(xlUp).Row

For x = 1 To cantidad

  ganador = WorksheetFunction.RandBetween(2, ult)

  Cells(ganador, 3) = Cells(ganador, 3) & "regalo" & x

Next

End Sub

 

Paso 1:  Usamos Inputbox para mostrar un recuadro en el que pedimos la cantidad de regalos a ser distribuidos, puedes conocer más del Inputbox en:

¿Qué es un Inputbox?

Función Inputbox en VBA

Paso 2: Utilizamos el código que nos permite encontrar la última fila con VBA, esto con la finalidad de saber el número de la fila hasta la cual encontramos a las personas que participan en el sorteo. 

Paso 3: Usamos el bucle For Next en VBA, donde cada iteración del for sirve para entregar un regalo del sorteo, por ejemplo, si existen 10 regalos el for se ejecutará 10 veces (una vez para cada regalo)

Paso 4: Se utiliza WorksheetFunction.RandBetween a fin de determinar la fila en la que se encuentra el ganador del sorteo

Paso 5: Por medio de Cells en VBA, marcamos a los ganadores en la hoja.

 

Sorteo sin  repeticiones 

En este segundo caso vamos a tener algunas variantes en el código en VBA.

Sub sorteo2()

cantidad = InputBox("ingrese cantidad", "Título")

ult = Cells(Rows.Count, 1).End(xlUp).Row

For x = 1 To cantidad

  ganador = WorksheetFunction.RandBetween(2, ult)

  If Cells(ganador, 3) = "" Then

     Cells(ganador, 3) = "regalo" & x

  Else

      x = x - 1

  End If

Next

End Sub

 

A diferencia del primer código incluimos el uso de IF THEN ELSE, por medio del IF detectamos si la persona elegida ya tiene un regalo o no, si no tiene regalo se le entrega uno, si ya tiene un regalo retrocedemos el valor de X para intentar entregar el mismo regalo nuevamente.

Consideraciones finales:

Es importante, en particular para el segundo caso, que el número de regalos a distribuir no supera el número de personas, sino se entrará en un bucle infinito. 

Adicionalmente podemos agregar una macro para limpiar la columna con los resultados si necesitamos volver a distribuir los regalos. 

En el siguiente enlace descarga el archivo con el ejemplo completo del sorteo: Sorteo en Excel con Macros

Deja una respuesta

Los campos requeridos estan marcados con *.