martes, 9 de junio de 2020

EXCEL: Lista aleatoria de nombres

Excel formula: Random list of names

Fórmula genérica

=INDICE(names,MATRIZALEAT(n,1,1,CONTARA(names),VERDADERO))

Explicación

Para crear una lista aleatoria de nombres, puede usar la función INDICE y la función MATRIZALEAT para seleccionar nombres aleatorios de una lista existente. En el ejemplo que se muestra, la fórmula en D5 es:
=INDICE(names,MATRIZALEAT(10,1,1,CONTARA(names),VERDADERO))
que devuelve 10 valores aleatorios de los "nombres" de rango con nombre (B5: B104).

Cómo funciona esta fórmula

En esencia, esta fórmula usa la función INDICE para recuperar 10 nombres aleatorios de un rango con nombre llamado "nombres" que contiene 100 nombres. Por ejemplo, para recuperar el quinto nombre de la lista, usamos INDICE de esta manera:
=INDICE(names,5)
Sin embargo, el truco en este caso es que no queremos un solo nombre en una ubicación conocida, queremos 10 nombres aleatorios en ubicaciones desconocidas entre 1 y 100. Este es un excelente caso de uso para la función MATRIZALEAT, que puede crear un conjunto aleatorio de enteros en un rango dado. Trabajando de adentro hacia afuera, usamos MATRIZALEAT para obtener 10 números aleatorios entre 1 y 100 de esta manera:
MATRIZALEAT(10,1,1,CONTARA(names)
La función CONTARA se usa para obtener un conteo dinámico de nombres en la lista, pero podríamos reemplazar CONTARA con un 100 codificado en este caso con el mismo resultado:
=INDICE(names,MATRIZALEAT(10,1,1,100,VERDADERO))
En cualquier caso, MATRIZALEAT devolverá 10 números en una matriz que se ve así:
{64;74;13;74;96;65;5;73;84;85}
Nota: estos números son aleatorios solamente y no se asignan directamente al ejemplo que se muestra.
Esta matriz se devuelve directamente a la función INDICE como argumento de fila:
=INDICE(names, {64;74;13;74;96;65;5;73;84;85}
Debido a que le estamos dando a INDICE 10 números de fila, obtendrá 10 resultados, cada uno correspondiente a un nombre en la posición dada. Los 10 nombres aleatorios se devuelven en un rango de derrame que comienza en la celda D5.
Nota: MATRIZALEAT es una función volátil y se volverá a calcular cada vez que se cambie la hoja de trabajo, lo que provocará que se recurran los valores. Para evitar que los valores se ordenen automáticamente, puede copiar las fórmulas y luego usar Pegado especial> Valores para convertir fórmulas en valores estáticos.

Prevenir duplicados

Un problema con la fórmula anterior (dependiendo de sus necesidades) es que MATRIZALEAT a veces generará números duplicados. En otras palabras, no hay garantía de que MATRIZALEAT devolverá 10 números únicos.
Para garantizar 10 nombres diferentes de la lista, puede adaptar la fórmula para ordenar aleatoriamente la lista completa de nombres, luego recuperar los primeros 10 nombres de la lista. La fórmula en F5 utiliza este enfoque:

El enfoque aquí es el mismo que el anterior: estamos usando INDICE para recuperar 10 valores de la lista de nombres. Sin embargo, en esta versión de la fórmula, estamos ordenando la lista de nombres al azar antes de entregar la lista a INDICE de esta manera:
ORDENARPOR(names,MATRIZALEAT(CONTARA(names)))
Aquí, la función ORDENARPOR se usa para ordenar la lista de nombres aleatoriamente con una matriz de valores creados por la función MATRIZALEAT, como se explica con más detalle aquí.
Finalmente, necesitamos recuperar 10 valores. Debido a que ya tenemos nombres en un orden aleatorio, simplemente podemos solicitar los primeros 10 con una matriz creada por la función SECUENCIA como esta:
SEQUENCE(10)
SECUENCIA construye una serie de números secuenciales:
{1;2;3;4;5;6;7;8;9;10}
que se devuelve a la función INDICE como argumento de fila. INDICE luego devuelve los primeros 10 nombres en un rango de derrame como la fórmula original.

Comentarios en Facebook


0 comentarios:

Copyright © 2021 TRUJILLOSOFT