Répétition de variables aléatoires en VBA
Comment puis-je utiliser aléatoire et rnd pour obtenir la répétition d'une liste de variables aléatoires?
En répétant liste, je veux dire, si vous exécutez une boucle pour obtenir 10 nombres aléatoires, chaque nombre aléatoire dans la liste sera unique. En outre, si vous exécutez cette séquence à nouveau, vous obtenez le même 10 nombres aléatoires comme avant.
Des précisions sur "répétition de la liste".
OriginalL'auteur sooprise | 2010-05-21
Vous devez vous connecter pour publier un commentaire.
À partir de Microsoft sur sa bouche:
Voir ici pour plus de détails.
L'ensemble de la section:
Remarques
La
Rnd
fonction renvoie une valeur inférieure à 1 mais supérieur ou égal à zéro.La valeur de nombre détermine la
Rnd
génère un nombre aléatoire:Pour toute donnée initiale de semences, le même numéro de séquence est générée, car chaque appel successif à la
Rnd
fonction utilise le numéro précédent, comme une graine pour le numéro suivant dans la séquence.Avant d'appeler
Rnd
, utilisez leRandomize
déclaration sans argument pour initialiser le générateur de nombres aléatoires avec des semences basé sur le système de minuterie.Pour produire des entiers aléatoires dans une plage donnée, utilisez cette formule:
Ici, upperbound est le nombre le plus élevé de la gamme, et la limite inférieure est le nombre le plus bas de la gamme.
Note De répéter des séquences de nombres aléatoires, composez le Rnd avec un argument négatif immédiatement avant de l'utiliser
Randomize
avec un argument numérique. L'utilisation d'Aléatoire avec la même valeur pour le nombre ne doit pas répéter la séquence précédente.Par exemple, si vous placez ce code dans Excel, il génère un nombre différent à chaque fois que vous le lancez:
Toutefois, si vous supprimez le
x = Rnd(-1)
ligne, il génère le même nombre à chaque exécution.Note que vous avez à faire deux choses. Appel
Rnd
avec un argument négatif et appelRandomize
avec un argument spécifique. Modification de l'une de ces choses vont vous donner une autre graine (et donc de la séquence).Edit:
Re votre commentaire:
Vous avez maintenant besoin d'un plus de morceau de l'information. Ce que vous demandez n'est pas aléatoire de chiffres, mais un réarrangement de l'algorithme. Je vais vous référer à une précédente réponse que j'ai donné sur la façon de faire ici. Tout ce que vous devez faire est de combiner le brassage de l'algorithme avec la grenaison détaillées ci-dessus et vous serez d'avoir votre reproductible, séquence unique.
Et voici un code qui montre en action. À chaque exécution de ce sous-programme renvoie la séquence
4 1 5 6 2 3 7 10 9 8
donc je pense que c'est ce que vous avez été au bout, un repetable, "aléatoire", séquence unique. Si vous voulez être en mesure de générer des séquences différentes (mais toujours dans une manière reproductible), il vous suffit de modifier la valeur donnée à laRandomize
.cela prend tout son sens que si j'ai mal compris encore une fois 🙂 j'ai mis à jour la réponse à de nouvelles informations basées sur ce commentaire.
+1 Parce que je suis reconnaissant que je suis capable de m'adapter à mes besoins, malgré la façon dont il fonctionne à vivre au dessus de ma tête. Je ne peux pas dire ce qui se passe après qu'elle ajoute
"Values:"
às
. Ou bien, avant même l', mais c'est le nombre de calculs de la partie qui est le plus important pour le comprendre. Je souhaite que je pourrais voir le "Évaluer la Formule" équivalent processus étape par étape pour cette/VBA en général.il est connu comme un Fisher Yates shuffle et plus de détails sur la façon dont il fonctionne peut être trouvé sur le lien donné dans la réponse (stackoverflow.com/questions/1858610/...) ou par la recherche de ce terme. Le lien va à travers elle, étape par étape, qui shoould, je l'espère.
J'avais lu qu'un tas de fois avant mon commentaire et il était toujours en train de faire mes yeux de la croix, mais je crois que c'est à cause de mon insuffisance dans la visualisation de tableaux. Je ne suis pas encore familier avec eux suffisamment pour être capable de "travailler" avec eux dans "ma" mémoire haha...cependant, elle m'A donné une bonne plate-forme pour tenir sur, et en les utilisant avec cette super page et je pense que je l'ai maintenant, merci. 🙂 [Je sais c'est un peu "bavard" mais j'ajoute ici un lien qui complète la réponse donc j'espère que le chat heureux mods laisser ici...]
OriginalL'auteur paxdiablo