función aleatoria.

17/10/2005 - 12:59 por Roberto | Informe spam
Cómo conseguir que de un universo de elementos, seleccionar una muestra
aleatoria pero que no se repita ningun elemento. ¿Existen funciones
especiales? o con la combianción de ambas.

Muchas Gracias de antemano

Preguntas similare

Leer las respuestas

#1 victorbcn1952NO
17/10/2005 - 13:07 | Informe spam
Excel tiene estas dos funciones:

=ALEATORIO()
=ALEATORIO.ENTRE(inferior;superior)

Mírate la ayuda, a ver si resuelves tu problema. Si no, vuelve a escribir.

:-)


Roberto wrote:

Cómo conseguir que de un universo de elementos, seleccionar una muestra
aleatoria pero que no se repita ningun elemento. ¿Existen funciones
especiales? o con la combianción de ambas.

Muchas Gracias de antemano
Respuesta Responder a este mensaje
#2 Roberto
17/10/2005 - 13:16 | Informe spam
Con estas funciones no consigo solucionar el problema, pues me generan
numeros aleatorios nuevos otra vez, pero no me discrima los sacados
previamente y me siguen saliendo numeros repetidos de la muestra.





""Víctor"" escribió en el mensaje
news:%
Excel tiene estas dos funciones:

=ALEATORIO()
=ALEATORIO.ENTRE(inferior;superior)

Mírate la ayuda, a ver si resuelves tu problema. Si no, vuelve a escribir.

:-)


Roberto wrote:

Cómo conseguir que de un universo de elementos, seleccionar una muestra
aleatoria pero que no se repita ningun elemento. ¿Existen funciones
especiales? o con la combianción de ambas.



Muchas Gracias de antemano




Respuesta Responder a este mensaje
#3 Héctor Miguel
17/10/2005 - 21:03 | Informe spam
hola, Roberto !

Con estas funciones no consigo solucionar el problema, pues me generan numeros aleatorios nuevos otra vez
pero no me discrima los sacados previamente y me siguen saliendo numeros repetidos de la muestra [...]



como no has comentado cual es el rango con los elementos 'a seleccionar aleatoriamente'...
espero que te parezca [al menos... 'casi'] 'verdaderamente aleatoria' la siguiente propuesta: :))
si cualquier duda [o informacion adcional]... comentas?
saludos,
hector.

1.- da nombre a un rango [columna en blanco] con el mismo numero de filas adyacente a tu 'base de datos'
[p.e. 'Seleccion']
2.- pon en celdas 'aparte' las condiciones que deberan 'cumplirse' [p.e.]
a) 'la cuenta' de las filas que se deberan seleccionar [p.e. 50] y dale un nombre [p.e. 'Objetivo']
b) 'la suma' de las filas (rango_nombre 'Seleccion'] que 'quedaran' con el valor de 1 [uno] por 'efectos' de la macro
=> dale otro nombre [p.e. 'Resultado'] => formula: =suma(seleccion)
3.- aplica formatos condicionales a TODA la base de datos 'con relacion' al rango ['Seleccion' en este ejemplo]
[suponiendo que 'J' es la columna donde queda dicho rango -Seleccion- y que la lista inicia en la fila 2]
a) formato / formato condicional
b) condicion => formula
c) formula => =$J2=1 => columna FIJA y fila 'relativa' < d) formato... => colores, bordes, letra y trama a tu eleccion y 'acepta' :)
4.- podrias inclusive manejar rangos 'dinamicos' y los formatos condicionales 'por codigo'
[por si deseas conservar una 'flexibilidad' en el listado] ;)
5.- copia en un modulo 'normal' el codigo al final de este mensaje [y ejecutalo cuantas veces quieras]
lo que 'hace' el codigo es seleccionar AL AZAR una de 4 opciones para 'poner' unos o ceros en el rango ['Seleccion']
y las cuatro [posibles] opciones, que 'recorren' el listado un orden aleatorio son:
a) de arriba hacia abajo 'saltando aleatoriamente' un numero de filas
b) de abajo hacia arriba 'saltando aleatoriamente' un numero de filas
c) de la mitad del listado hacia arriba y luego hacia abajo 'saltando aleatoriamente' un numero de filas
d) de la mitad del listado hacia abajo y luego hacia arriba 'saltando aleatoriamente' un numero de filas
6.- si el listado es muy extenso... QUITA los 'comentarios' en el codigo para 'acelerar' el proceso
[una vez que hayas 'visto' el funcionamiento del mismo] :))
7.- obviamente tu puedes agregar mas variantes :)
lo que te puedo 'asegurar' es que... son pocas las probabilidades de 'repetir' una seleccion anterior :))

en un modulo 'normal' ==Sub Muestra_Aleatoria()
' Application.ScreenUpdating = False
If Not [Objetivo] > 0 Then Exit Sub
Dim Forma As Integer, Sig As Long: Forma = Int(4 * Rnd)
With [Seleccion]: .ClearContents
Do
If Forma = 1 Then
For Sig = .Rows.Count To 1 Step -((7 * Rnd) + 1)
If .Cells(Sig) = 0 Then .Cells(Sig) = Int(2 * Rnd)
' If .Cells(Sig) = 0 Then .Cells(Sig).ClearContents
If [Resultado] = [Objetivo] Then Exit For
Next
ElseIf Forma = 2 Then
For Sig = .Rows.Count / 2 To 1 Step -((7 * Rnd) + 1)
If .Cells(Sig) = 0 Then .Cells(Sig) = Int(2 * Rnd)
' If .Cells(Sig) = 0 Then .Cells(Sig).ClearContents
If [Resultado] = [Objetivo] Then Exit For
Next
For Sig = .Rows.Count / 2 To .Rows.Count Step ((7 * Rnd) + 1)
If .Cells(Sig) = 0 Then .Cells(Sig) = Int(2 * Rnd)
' If .Cells(Sig) = 0 Then .Cells(Sig).ClearContents
If [Resultado] = [Objetivo] Then Exit For
Next
ElseIf Forma = 3 Then
For Sig = .Rows.Count / 2 To .Rows.Count Step ((7 * Rnd) + 1)
If .Cells(Sig) = 0 Then .Cells(Sig) = Int(2 * Rnd)
' If .Cells(Sig) = 0 Then .Cells(Sig).ClearContents
If [Resultado] = [Objetivo] Then Exit For
Next
For Sig = .Rows.Count / 2 To 1 Step -((7 * Rnd) + 1)
If .Cells(Sig) = 0 Then .Cells(Sig) = Int(2 * Rnd)
' If .Cells(Sig) = 0 Then .Cells(Sig).ClearContents
If [Resultado] = [Objetivo] Then Exit For
Next
Else
For Sig = 1 To .Rows.Count Step ((7 * Rnd) + 1)
If .Cells(Sig) = 0 Then .Cells(Sig) = Int(2 * Rnd)
' If .Cells(Sig) = 0 Then .Cells(Sig).ClearContents
If [Resultado] = [Objetivo] Then Exit For
Next
End If
Loop Until [Resultado] = [Objetivo]
End With
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida