Ya no me quedan neuronas vivas

16/02/2004 - 16:48 por Andrés Farias | Informe spam
Hola a todos
Tengo un dilema que no he podido resolver. Espero que me puedan ayudar.
(enviaré adjunto de 17,5 Kb)
Tengo unos códigos numéricos asociados a productos que van de 1 a 50, y
tengo que completar una tabla de asignaciones con solamente 10 de ellos
elegidos al azar, sin criterio alguno de selección.
Quiero lograr una fórmula que me permita realizar esta selección
aleatoriamente pero sin que se repitan los valores elegidos, ya sea mediante
un botón, macro o un simple F9.
Hasta el momento he intentado con las siguientes fórmulas y combinaciones de
ellas sin lograr dar con el resultado requerido:
JERARQUIA()
ALEATORIO()
K.ESIMO.MAYOR()
BUSCARV()
BUSCARH()
ELEGIR()
SI()
CONTARA()
LOS.POLLITOS.DICEN.PIO.PIO.PIO() (¡medida desesperada!)
Ojala alguien tenga ya resuelto este drama anteriormente y me pueda
compartir su experiencia.
Eternamente agradecido.
Andrés Farias.cl
AMD Athlon 2000
Dual Boot
MotherBoard Integrada de la más ordinaria
Windows XP Pro SP1 + Win2k Server SP4
Tower sin tapas y cables sueltos por doquier.

Preguntas similare

Leer las respuestas

#6 Santi
16/02/2004 - 20:25 | Informe spam
blanco escribió:

Mira a ver si te da alguna pista



Pones en un comentario: "Ten cuidado porque puede salir algún código
repetido".

Pero es que justamente eso es lo que se planteaba en el problema
inicial. Evitar que salieran repetidos.
Y es lo que hace el problema un poquito más complicado.

Yo he intentado resolver eso "anulando" las opciones en las que sale un
código repetido.

Se podría hacer una macro, para que con una sola pulsación en un botón,
recalcule la hoja las veces necesarias hasta encontrar una solución
aceptable, pero teniendo en cuenta, que pulsando F9 un máximo de cinco o
seis veces, se obtiene el mismo resultado, sin utilizar macros, dejo a
criterio de Andrés la elección de incorporarlas o no.
Respuesta Responder a este mensaje
#7 Fernando Arroyo
16/02/2004 - 21:17 | Informe spam
Servando:

Tienes razón, hay que sustituir el 10 por un 9, lo cual tiene además la ventaja de que el código ganará un poco en rendimiento al tener que generar un número aleatorio menos.
Gracias por la aportación, y un saludo.


Fernando Arroyo
MS MVP - Excel

"Servando" escribió en el mensaje news:1154b01c3f4bd$13385100$
Fernando:

El unico inconveniente que encontré a la Macro es en la
siguiente línea...

If UBound(m) = 10 Then Exit Do

El riesgo esta en que UBound(m) da la cantidad de
separadores dentro de una matriz... esto quiere decir que
la cantidad de elemento escogidos en realidad fueron 11.

Si lo que tubieramos que hacer es seleccionar
aleatoriamente los 10 numeros entre un rango de otros 10
(ej:31 a 40) y desde luego sin ordenar (sino no tiene
ningun sentido hacer esto), entraría en un loop infinito.

Entonces la instrucción deberia se la siguiente:
If UBound(m) = 9 Then Exit Do

Por otra parte y solo para nuestros amigos que estan
leyendo esto...
La instruccion "If InStr(s, Right("0" & v, 2)) = 0"
esta validando que el valor seleccionado no exista ya
dentro de la cadena "s", lo que "garantiza" que un valor
no se repita.

Saludos
Servando Villalon
Respuesta Responder a este mensaje
#8 Fernando Arroyo
16/02/2004 - 21:23 | Informe spam
"Andrés Farias" <andresfariasARROBAmsnPUNTOcom> escribió en el mensaje news:O%
Gracias Fernado. Ya lo probé y funciona a la perfección. Ahora me voy a
dedicar a resucitar algunas neuronas ;-)



La cosa ésta del Excel acaba con todos nosotros, te lo digo yo :-)

Un millón de gracias, (no canjeables por Euros)



Bueno, llegado el caso podría "sacrificarme" y aceptar dólares estadounidenses ;-)

Andrés Farias.cl
AMD Athlon 2000
Dual Boot
MotherBoard Integrada de la más ordinaria
Windows XP Pro SP1 + Win2k Server SP4
Tower sin tapas y cables sueltos por doquier.



Un saludo.


Fernando

PS: Si no lo has hecho ya, revisa el mensaje de Servando y haz la sustitución que sugiere. Si tienes que ejecutar el código de forma repetida notarás una mejora de rendimiento.
Respuesta Responder a este mensaje
#9 Andrés Farias
17/02/2004 - 14:46 | Informe spam
je je je. Tan nulo no debo ser en esto de las macros, ya que justamente ese
fue el cambio que le hice, es decir reemplazar el 10 por un 9.
El resto del código estoy tratando de entenderlo pero funciona.
Gracias a todos por su interés
NOTA: En Chile el dólar está muy devaluado, en tanto el Euro va en pleno
ascenso. No conviene canjear Euros por dólares XDDDDDDD¡

Andrés Farias.cl


"Fernando Arroyo" escribió en el mensaje
news:#
Servando:

Tienes razón, hay que sustituir el 10 por un 9, lo cual tiene además la
ventaja de que el código ganará un poco en rendimiento al tener que generar
un número aleatorio menos.
Gracias por la aportación, y un saludo.


Fernando Arroyo
MS MVP - Excel

"Servando" escribió en el
mensaje news:1154b01c3f4bd$13385100$
Fernando:

El unico inconveniente que encontré a la Macro es en la
siguiente línea...

If UBound(m) = 10 Then Exit Do

El riesgo esta en que UBound(m) da la cantidad de
separadores dentro de una matriz... esto quiere decir que
la cantidad de elemento escogidos en realidad fueron 11.

Si lo que tubieramos que hacer es seleccionar
aleatoriamente los 10 numeros entre un rango de otros 10
(ej:31 a 40) y desde luego sin ordenar (sino no tiene
ningun sentido hacer esto), entraría en un loop infinito.

Entonces la instrucción deberia se la siguiente:
If UBound(m) = 9 Then Exit Do

Por otra parte y solo para nuestros amigos que estan
leyendo esto...
La instruccion "If InStr(s, Right("0" & v, 2)) = 0"
esta validando que el valor seleccionado no exista ya
dentro de la cadena "s", lo que "garantiza" que un valor
no se repita.

Saludos
Servando Villalon
Respuesta Responder a este mensaje
#10 Andrés Farias
17/02/2004 - 14:53 | Informe spam
Gracias a todos por sus respuestas. Me han ayudado bastante con sus
propuestas.
Saludos para toooodos.

Andrés Farias.cl
Sin ánimo de ofender a nadie, pero...
¿Temas de soberanía pendientes?
"Santi" escribió en el mensaje
news:
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida