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

#1 Fernando Arroyo
16/02/2004 - 17:49 | Informe spam
Hace algunas semanas se planteó una consulta similar, si bien en este caso era para obtener 6 números aleatorios y no repetidos de la serie 1-49 (probablemente para la lotería española llamada primitiva). Yo escribí un pequeño sub, y lo he retocado por si puede servirte:

Sub Aleatorio10_50()
Dim v As Byte, s As String, m As Variant
'Crear la matriz con los 6 números
Do
v = Int((50 - 1 + 1) * Rnd + 1)
If InStr(s, Right("0" & v, 2)) = 0 Then
s = s & IIf(Len(s) = 0, "", ",") & Right("0" & v, 2)
End If
m = Split(s, ",")
If UBound(m) = 10 Then Exit Do
Loop

'Volcar matriz a hoja
For v = 1 To 10
Worksheets("Hoja1").Range("G" & v + 5) = m(v - 1)
Next v

'Ordenar rango A1:A6
Worksheets("Hoja1").[E6:G15].Sort _
Key1:=Range("G6"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Lo he probado un par de veces y parece que funciona, pero no estará de más que tú lo pruebes más a fondo antes de fiarte de que trabaja bien.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Andrés Farias" <andresfariasARROBAmsnPUNTOcom> escribió en el mensaje news:
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.


Respuesta Responder a este mensaje
#2 Andrés Farias
16/02/2004 - 18:00 | Informe spam
Gracias Fernado. Ya lo probé y funciona a la perfección. Ahora me voy a
dedicar a resucitar algunas neuronas ;-)
Un millón de gracias, (no canjeables por Euros)
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.
"Fernando Arroyo" escribió en el mensaje
news:
Hace algunas semanas se planteó una consulta similar, si bien en este caso
era para obtener 6 números aleatorios y no repetidos de la serie 1-49
(probablemente para la lotería española llamada primitiva). Yo escribí un
pequeño sub, y lo he retocado por si puede servirte:

Sub Aleatorio10_50()
Dim v As Byte, s As String, m As Variant
'Crear la matriz con los 6 números
Do
v = Int((50 - 1 + 1) * Rnd + 1)
If InStr(s, Right("0" & v, 2)) = 0 Then
s = s & IIf(Len(s) = 0, "", ",") & Right("0" & v, 2)
End If
m = Split(s, ",")
If UBound(m) = 10 Then Exit Do
Loop

'Volcar matriz a hoja
For v = 1 To 10
Worksheets("Hoja1").Range("G" & v + 5) = m(v - 1)
Next v

'Ordenar rango A1:A6
Worksheets("Hoja1").[E6:G15].Sort _
Key1:=Range("G6"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Lo he probado un par de veces y parece que funciona, pero no estará de más
que tú lo pruebes más a fondo antes de fiarte de que trabaja bien.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Andrés Farias" <andresfariasARROBAmsnPUNTOcom> escribió en el mensaje
news:
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.


Respuesta Responder a este mensaje
#3 Servando
16/02/2004 - 19:45 | Informe spam
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


Hace algunas semanas se planteó una consulta similar, si


bien en este caso era para obtener 6 números aleatorios y
no repetidos de la serie 1-49 (probablemente para la
lotería española llamada primitiva). Yo escribí un
pequeño sub, y lo he retocado por si puede servirte:

Sub Aleatorio10_50()
Dim v As Byte, s As String, m As Variant
'Crear la matriz con los 6 números
Do
v = Int((50 - 1 + 1) * Rnd + 1)
If InStr(s, Right("0" & v, 2)) = 0 Then
s = s & IIf(Len(s) = 0, "", ",") & Right("0"


& v, 2)
End If
m = Split(s, ",")
If UBound(m) = 10 Then Exit Do
Loop

'Volcar matriz a hoja
For v = 1 To 10
Worksheets("Hoja1").Range("G" & v + 5) = m(v - 1)
Next v

'Ordenar rango A1:A6
Worksheets("Hoja1").[E6:G15].Sort _
Key1:=Range("G6"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Lo he probado un par de veces y parece que funciona,


pero no estará de más que tú lo pruebes más a fondo antes
de fiarte de que trabaja bien.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Andrés Farias" <andresfariasARROBAmsnPUNTOcom> escribió


en el mensaje
news:
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.




.

Respuesta Responder a este mensaje
#4 Andrés Farias
16/02/2004 - 19:50 | Informe spam
Bastante buena la alternativa. Algo así es lo que intentaba hacer. Gracias
por tu colaboración

Andrés Farias.cl

"blanco" escribió en el mensaje
news:OES$
Mira a ver si te da alguna pista

Un saludo


Andrés Farias <andresfariasARROBAmsnPUNTOcom> escribió en el mensaje de
noticias
> eso mismo ;-)
>
> 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.
> "Andrés Farias" <andresfariasARROBAmsnPUNTOcom> escribió en el mensaje
> news:
> > 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.
> >
> >
>
>
>



Respuesta Responder a este mensaje
#5 Santi
16/02/2004 - 20:09 | Informe spam
Andrés Farias escribió:

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.



A ver si te sirve esta solución.
He intentado hacerlo sin macros, pero el precio ha sido que en ocasiones
tienes que pulsar F9 cinco o seis veces, hasta que encuentra una
solución aceptable.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida