
Formule générique
=INDEX(names,RANDARRAY(n,1,1,COUNTA(names),TRUE))
Sommaire
Pour créer une liste aléatoire de noms, vous pouvez utiliser la fonction INDEX et la fonction RANDARRAY pour sélectionner des noms aléatoires dans une liste existante. Dans l'exemple illustré, la formule en D5 est:
=INDEX(names,RANDARRAY(10,1,1,COUNTA(names),TRUE))
qui renvoie 10 valeurs aléatoires de la plage nommée "noms" (B5: B104).
Explication
Au cœur, cette formule utilise la fonction INDEX pour récupérer 10 noms aléatoires à partir d'une plage nommée appelée «noms» qui contient 100 noms. Par exemple, pour récupérer le cinquième nom de la liste, nous utilisons INDEX comme ceci:
=INDEX(names,5)
Cependant, l'astuce dans ce cas est que nous ne voulons pas d'un seul nom à un emplacement connu, nous voulons 10 noms aléatoires à des emplacements inconnus entre 1 et 100. C'est un excellent cas d'utilisation de la fonction RANDARRAY, qui peut créer un ensemble aléatoire d'entiers dans une plage donnée. En travaillant de l'intérieur vers l'extérieur, nous utilisons RANDARRAY pour obtenir 10 nombres aléatoires entre 1 et 100 comme ceci:
RANDARRAY(10,1,1,COUNTA(names)
La fonction COUNTA est utilisée pour obtenir un décompte dynamique des noms dans la liste, mais nous pourrions remplacer COUNTA par un 100 codé en dur dans ce cas avec le même résultat:
=INDEX(names,RANDARRAY(10,1,1,100,TRUE))
Dans les deux cas, RANDARRAY renverra 10 nombres dans un tableau qui ressemble à ceci:
(64;74;13;74;96;65;5;73;84;85)
Remarque: ces nombres sont uniquement aléatoires et ne correspondent pas directement à l'exemple illustré.
Ce tableau est renvoyé directement à la fonction INDEX comme argument de ligne:
=INDEX(names, (64;74;13;74;96;65;5;73;84;85)
Parce que nous donnons à INDEX 10 numéros de ligne, cela donnera 10 résultats, chacun correspondant à un nom à la position donnée. Les 10 noms aléatoires sont renvoyés dans une plage de débordement commençant dans la cellule D5.
Remarque: RANDARRAY est une fonction volatile et recalculera chaque fois que la feuille de calcul est modifiée, entraînant le recours aux valeurs. Pour empêcher le tri automatique des valeurs, vous pouvez copier les formules, puis utiliser Collage spécial> Valeurs pour convertir les formules en valeurs statiques.
Empêcher les doublons
Un problème avec la formule ci-dessus (en fonction de vos besoins) est que RANDARRAY génère parfois des numéros en double. En d'autres termes, il n'y a aucune garantie que RANDARRAY renverra 10 numéros uniques.
Pour garantir 10 noms différents dans la liste, vous pouvez adapter la formule pour trier aléatoirement la liste complète des noms, puis récupérer les 10 premiers noms de la liste. La formule en F5 utilise cette approche:
=INDEX(SORTBY(names,RANDARRAY(COUNTA(names))),SEQUENCE(10))
L'approche ici est la même que ci-dessus - nous utilisons INDEX pour récupérer 10 valeurs de la liste de noms. Cependant, dans cette version de la formule, nous trions la liste des noms au hasard avant de remettre la liste à INDEX comme ceci:
SORTBY(names,RANDARRAY(COUNTA(names)))
Ici, la fonction SORTBY est utilisée pour trier la liste de noms de manière aléatoire avec un tableau de valeurs créé par la fonction RANDARRAY, comme expliqué plus en détail ici.
Enfin, nous devons récupérer 10 valeurs. Comme nous avons déjà des noms dans un ordre aléatoire, nous pouvons simplement demander les 10 premiers avec un tableau créé par la fonction SEQUENCE comme ceci:
SEQUENCE(10)
SEQUENCE construit un tableau de nombres séquentiels:
(1;2;3;4;5;6;7;8;9;10)
qui est renvoyé à la fonction INDEX comme argument de ligne. INDEX renvoie ensuite les 10 premiers noms dans une plage de déversement comme la formule d'origine.