Excel - macro?

   
Vista:

macro?

Publicado por Jorge Leon (63 intervenciones) el 28/02/2010 15:05:23
Hola amigos de foro de excel, quiero crear una macro que me pueda solucionar el siguiente problema: tengo 20 alumnos y 20 tareas y lo que requiero es que cada día cada alumno realice una de las 20 tareas, solo que no repitan la misma tarea o una tarea ya realizada en los 20 días? Lo trate de realizar con la siguiente función
=BUSCARV(A2,$H$1:$I$20,2,FALSO)
donde la columna h1 hasta h20 tiene los nombres de los alumnos y en la columna i1 hasta i20 las diferentes tareas y en las celdas h (en h1 =COINCIDIR(K.ESIMO.MAYOR($J$1:$J$20,FILA()),$J$1:$J$20,0) y en las celda j (en j1 =ALEATORIO()) las funciones se repiten en las celdas h1 a h20 y j1 a j20...........................................................
con estas funciones, funciona pero si se repiten de repente las tareas un mismo alumno y lo que quiero es que los alumnos no repitan en 20 días ninguna tarea y que seleccione la tarea al azar para que no adivinen que tarea les tocara el siguiente día.... de antemano muchas gracias....su amigo Jorge
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:macro?

Publicado por Raziel (243 intervenciones) el 01/03/2010 18:44:34
Hola Jorge, seguro que se podria hacer mejor, pero aqui mi pequeña aportacion...

A1.- 1
A2:A20.- =CONTAR($A$1:A1)+1
B1:B20.- Tus tareas
C1.- =BUSCARV(ALEATORIO.ENTRE(1,MAX(A1:A20)),A1:B20,2,FALSO)

Que hace A1:A20? este rango nos sirve para crear un folio consecutivo, a cada folio le pertenece una tarea, basicamente un indice.
La formula de C1 nos indicara una tarea cada vez que la hoja cambie. Como evitamos que las tareas se repitan?, aca lo fastidioso, tenemos que borrar el indice que corresponda a la tarea que C1 nos este indicando, de este modo los indices se recalculan al igual que la tarea y asi evitamos duplicidad.

Espero haberme explicado.
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:macro?

Publicado por Jorge Leon (63 intervenciones) el 02/03/2010 17:59:26
Muchas gracias amigo Raziel................... lo voy a probar y te informo si me funciono... gracias ....Jorge
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:macro?

Publicado por jcs (494 intervenciones) el 02/03/2010 09:40:21
Muy buenas,

parecía más sencillo de lo que al final me ha resultado, pero creo queal final ha salido. Bueno, yo no veo posibilidad de hacerlo sin una macro. Esta es la que te propongo:

Private Sub asignar_tareas()
Range("B2:U21").Select
Selection.ClearContents
tarea = "ABCDEFGHIJKLMNÑOPQRS"
For i = 2 To 21
Cells(2, i) = Mid(tarea, Int(Rnd(1) * Len(tarea) + 1), 1)
tarea = Replace(tarea, Cells(2, i), "")
Next
For i = 2 To 21
For j = 3 To 21
tarea = "ABCDEFGHIJKLMNÑOPQRS"
For k = 2 To j - 1
tarea = Replace(tarea, Cells(k, i), "")
Next
For k = 2 To i - 1
tarea = Replace(tarea, Cells(j, k), "")
Next
a = Mid(tarea, Int(Rnd(1) * Len(tarea) + 1), 1)
If a = "" Then
j = 3
Else
Cells(j, i) = Mid(tarea, Int(Rnd(1) * Len(tarea) + 1), 1)
End If
Next
Next
End Sub

Esto te va a dar como resultado que en el rango B2:U21 unas letras de la A a la S que luego tú tendrás que identificar con tus tareas (BUSCARV). En la Fila 1 tienes que poner los días y en la columna A los alumnos.

Espero que sea lo que quieres.

Un saludo. Juanjo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:macro?

Publicado por jcs (494 intervenciones) el 02/03/2010 13:09:12
Muy buenas,

el código anterior, en caso, no ofrece ninguna solución y se ejecuta permanentemente. Creo que esto lo soluciona:

Sub asignar_tareas() Range("B2:U21").Select
Selection.ClearContents
For i = 2 To 21
tarea1 = "ABCDEFGHIJKLMNÑOPQRS"
For j = 2 To 21
tarea2 = tarea1
For k = 2 To i - 1
tarea2 = Replace(tarea2, Cells(j, k), "")
Next
a = Mid(tarea2, Int(Rnd(1) * Len(tarea2) + 1), 1)
If a = "" Then
i = i - 1
Exit For
Else
Cells(j, i) = a
tarea1 = Replace(tarea1, a, "")
End If
Next
Next
End Sub

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:macro?

Publicado por Jorge Leon (63 intervenciones) el 02/03/2010 17:58:45
Muchas gracias amigo Juanjo................... lo voy a probar y te informo si me funciono... graciaas ....Jorge
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar