Asignar días de manera aleatoria en excel

Dante,

El proyecto consta de asignar los días de la semana de Lunes a Viernes entre 8 personas de manera aleatoria. Este proceso se llevará a cabo durante 8 semanas. El día que salga "sorteado" será el día que la persona pueda trabajar desde su hogar sin necesidad de ir a la oficina, hacer un "home office".

El único requisito es, que por ejemplo, en un equipo de 8 personas no falten 3 personas el mismo día.

Te muestro un ejemplo:

Por ejemplo ahí, para la primera semana el número de personas máximas que faltan por día son 2. Solo 2 personas faltarán el lunes de la primera semana, solo 2 personas faltarán el martes de la primera semana, solo 2 personas faltarán el jueves y solo 2 faltarán el viernes, nunca 3 personas el mismo día.

Al presionar el botón "asignar días" quisiera que se corriera la primera semana para las 8 personas. Al volver a presionar, la segunda semana para las 8 personas, etc.

Esto lo hace lo primer macro que me enviaste (lo de correr la primera semana para todas las personas, pero solo era para 7 personas en la primera macro)

***Nota: Para la imagen yo caputré los días al azar.

Será posible una macro con esas características?

Muchísimas gracias de antemano!! =)

1 respuesta

Respuesta
1

H o l a:

No entiendo, en tu imagen cuáles 2 personas van a faltar el Lunes, ¿la persona 4 y la persona 8? ¿La 4 y la 8 van a faltar el lunes porque la macro les puso la palabra "Lunes"?

Pero puede ser que en cualquier semana, solamente salga un Lunes: podría salir así:

JUEVES LUNES VIERNES MIERCOLES MARTES VIERNES MIERCOLES MARTES

Y en la siguiente semana solamente salga un MARTES:

JUEVES VIERNES MARTES LUNES MIERCOLES VIERNES MIERCOLES LUNES

También puede ser que en la primera semana se la persona2, que en la siguiente semana nuevamente sea la persona2. ¿Eso es lo que quieres?

Si!! exactamente eso =) y no importa que en la semana 2 alguien vuelva a repetir (como lo mencionas) ya que es al azar.

Y si solamente numeras a las personas del 1 al 8.

Y en lugar de ponerte 5 días, te pongo 2 números, esos 2 números les toca Home Office el lunes.

Ejecutas la macro y te doy otros 2 números, a esos números los toca el martes.

Otra vez, salen 2 números, les toca el miércoles. Ver imagen:

Las personas sorteadas son las que tienen la "X", el día que les toca hacer home office aparece en la columna "J"

Si es así de simple, ya que la macro anterior está preparada para que funcione con cientos de personas y cientos de días, y a lo mejor no es tan complicado.

Si es más fácil así como lo acabas de proponer, excelente =)!! Solo una pregunta, por ejemplo en la semana 1 tendria que dar clic en el botón (por poner un ejemplo) y me sortea los del lunes de la primera semana y luego vuelvo a dar clic y me saca los del martes de la semana 1 también?

Y tendría que ir registrando quien sale de manera manual verdad?

No entendí.

¿Qué necesitas en concreto?

Qué te diga 2 personas para la semana1, otras 2 para la semana2, ¿otras 2 para la semana3?

El primer sorteo que se haga será siempre para el Lunes, el segundo sorteo será para el martes, etc.

No entiendo esto que pones: "por ejemplo en la semana 1 tendria que dar clic en el botón (por poner un ejemplo) y me sortea los del lunes de la primera semana y luego vuelvo a dar clic y me saca los del martes de la semana 1 también?"

Qué quieres, ¿qué con un click la macro te ponga todas las semanas?

Disculpa pero estoy perdido, ya no sé qué es lo que quieres.

Por qué no me pones una imagen datos reales de cómo lo haces manualmente.

Y por datos me refiero que si hay alguien que se llame Juan Perez, entonces pongas en la imagen a Juan Perez, no creo que alguien se llame Persona1

Al dar clic en "asignar días" que se corra la asignación de días para las 8 personas para la primera semana. Donde máximo se repita 2 veces el mismo día de la semana. Ver imagen.

Al dar clic nuevamente en "asignar días" que se corra la asignación de los 5 días de la semana para las 8 personas para la segunda semana, donde de igual forma se repita máximo 2 veces el mismo día de la semana (como son 8 personas, únicamente 3 días se van a repetir dos veces). Ver imagen.

Y continuar dando clic en "asignar días" hasta llenar la tabla. Ver imagen.

Me expliqué mejor?

Muchas Gracias!!!

Sorry, ya te había enviado mi anterior mensaje cuando vi lo de Juan Perez.. Es un programa apenas, para 8 personas candidatas, apenas se está proponiendo.

H o l a:

Tus imágenes son claras, pero quiero entender para qué quieres la información.

En la primera ejecución tienes esto:

Para que te sirve saber que a la persona1 en la celda A2 apareció "Lunes",

Para qué te sirve que a la Persona2 en la celda B2 dice "Miércoles".

Para qué te sirve que a la Persona3 en la celda C2 dice "Jueves".

Para que te sirve saber que a la persona4 en la celda D2 apareció "Lunes",

Para qué te sirve que a la Persona5 en la celda E2 dice "Miércoles".

Para qué te sirve que a la Persona6 en la celda F2 dice "Jueves".

Para qué te sirve que a la Persona7 en la celda G2 dice "Miércoles".

Para qué te sirve que a la Persona8 en la celda H2 dice "Jueves".

¿?

Sorry se me fue el día, debe ser así:

H o l a:

Tus imágenes son claras, pero quiero entender para qué quieres la información.

En la primera ejecución tienes esto:

Para que te sirve saber que a la persona1 en la celda A2 apareció "Lunes",

Para qué te sirve que a la Persona2 en la celda B2 dice "Miércoles".

Para qué te sirve que a la Persona3 en la celda C2 dice "Jueves".

Para que te sirve saber que a la persona4 en la celda D2 apareció "Miércoles",

Para qué te sirve que a la Persona5 en la celda E2 dice "Jueves".

Para qué te sirve que a la Persona6 en la celda F2 dice "Viernes".

Para qué te sirve que a la Persona7 en la celda G2 dice "Martes".

Para qué te sirve que a la Persona8 en la celda H2 dice "Martes".

¿?

Te anexo la macro para que realice lo que pusiste en las imágenes:

Sub DiaAleatorio()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    h2.Columns("B").ClearContents
    numdia = Application.CountA(h2.Columns("A")) - 1
    numper = h2.[C2]
    'If h2.[F2] Then
        fil = h1.Range("A" & Rows.Count).End(xlUp).Row + 1
    'Else
    '    fil = h2.[D2]
    'End If
    col = h2.[E2]
    '
    n = 0
    m = 0
    col = Columns(col).Column
    '
    Do While True
        y = Evaluate("=RANDBETWEEN(1," & numdia & ")")
        If h2.Cells(y + 1, "B") = "" Then
            h2.Cells(y + 1, "B") = "x"
            h1.Cells(fil, col) = h2.Cells(y + 1, "A")
            col = col + 1
            n = n + 1
            m = m + 1
            If n = numdia Then
                h2.Columns("B").ClearContents
                n = 0
            End If
            If m = numper Then
                Exit Do
            End If
        End If
    Loop
End Sub

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta. G r a c i a s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas