Nombres aléatoires sans répétitions

Formulation du problème

Supposons que nous devions créer un ensemble de nombres entiers aléatoires sans répétitions dans une plage de valeurs donnée. Exemples en déplacement :

  • générer des codes aléatoires uniques pour les produits ou les utilisateurs
  • assigner des personnes à des tâches (chacune au hasard dans la liste)
  • permutation des mots dans la requête de recherche (hello seo-shnikam)
  • jouer au loto etc...

Méthode 1. Simple

Pour commencer, considérons une option simple : nous devons obtenir un ensemble aléatoire de 10 entiers de 1 à 10. Utilisation de la fonction intégrée à Excel ENTRE LES CAS (BORD ENTRE) l'unicité n'est pas garantie. Si vous le saisissez dans une cellule de feuille et que vous le copiez sur 10 cellules, des répétitions peuvent facilement se produire :

Nombres aléatoires sans répétitions

Par conséquent, nous irons dans l'autre sens.

Toutes les versions d'Excel ont une fonction RANG (A SONNÉ), destiné à classer ou, en d'autres termes, à déterminer la première position d'un nombre dans un ensemble. Le plus grand nombre de la liste a rang=1, le deuxième en haut a rang=2, et ainsi de suite.

Entrons la fonction dans la cellule A2 SLCHIS (RAND) sans arguments et copiez la formule vers le bas de 10 cellules. Cette fonction va nous générer un ensemble de 10 nombres fractionnaires aléatoires de 0 à 1 :

Nombres aléatoires sans répétitions

Dans la colonne suivante, nous introduisons la fonction RANGpour déterminer la position dans le classement pour chaque nombre aléatoire reçu :

Nombres aléatoires sans répétitions

Nous obtenons dans la colonne B ce que nous voulions - n'importe quel nombre souhaité d'entiers aléatoires non répétitifs de 1 à 10.

En théorie, une situation peut se présenter lorsque SLCHIS nous donnera deux nombres aléatoires identiques dans la colonne A, leurs rangs correspondront et nous obtiendrons une répétition dans la colonne B. Cependant, la probabilité d'un tel scénario est extrêmement faible, étant donné que la précision est de 15 décimales.

Méthode 2. Compliqué

Cette méthode est légèrement plus compliquée, mais n'utilise qu'une seule formule matricielle. Disons que nous devons créer une liste de 9 entiers aléatoires non répétitifs dans la plage de 1 à 50 sur une feuille.

Entrez la formule suivante dans la cellule A2, cliquez à la fin Ctrl + Maj + Entrée (pour la saisir sous forme de formule matricielle !) et copiez la formule jusqu'au nombre de cellules souhaité :

Nombres aléatoires sans répétitions

Méthode 3. Macro

Et, bien sûr, vous pouvez résoudre le problème en utilisant la programmation en Visual Basic. Dans l'un des anciens articles sur l'échantillonnage aléatoire, j'ai déjà cité la fonction macro de tableau Lotto, qui produit le nombre requis de nombres aléatoires non répétitifs à partir d'un intervalle donné.

  • Comment compter le nombre de valeurs uniques dans une plage
  • Sélection aléatoire d'éléments dans une liste

Soyez sympa! Laissez un commentaire