Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1492to1496
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zufaellige, einmalige Auswahl aus Array

Zufaellige, einmalige Auswahl aus Array
16.05.2016 22:32:17
Anton
Guten Abend zusammen,
Ich moechte gerne, dass ZUFAELLIG zahlen zwischen 1 und 54 erzeugt werden. Jede Zahl soll aber nur einmal vorkommen. Meim bisheriger Ansatz sieht wie folgt aus, allerdings erhalte ich hier Error 9, was auch immer das heisst :D Habt ihr eine Idee? Vielleicht geht das ganze auf viel unfauwendiger.... Gruss, Anton
Sub test()
Dim vektor(1 To 54) As Integer
Range("A1:BZ2").Value = ""
Dim Z As Integer
Dim i As Integer
Dim Anzahl As Integer
For Z = 1 To 54
Worksheets("Sheet1").Calculate
vektor(Z) = Z
Cells(1, Z).Value = Z
Next Z
While Application.WorksheetFunction.Sum(vektor) > 0
Range("A3").Value = Anzahl
Random = Int((54 - 1 + 1) * Rnd - 1)
If vektor(Random) > 0 Then
Cells(2, Random).Value = vektor(Random)
vektor(Random) = 0
Anzahl = Anzahl + 1
End If
Wend
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zufaellige, einmalige Auswahl aus Array
17.05.2016 08:25:55
ChrisL
Hi Anton
Hier ist was faul:
Random = Int((54 * Rnd) + 1)
Calculate würde ich weglassen, dafür ein "Randomize" am Anfang vom Code rein.
Verwende Option Explicit, so dass keine Deklarationen vergessen gehen.
Da du die Zufallszahlen in gleicher Reihenfolge (geordnet) in die Zeile einträgst, ist das Zufallsresultat nicht ersichtlich. Die Durchmischung könntest mit einer zusätzlichen Zeile sichtbar machen:

While Application.WorksheetFunction.Sum(vektor) > 0
Random = Int((54 * Rnd) + 1)
If vektor(Random) > 0 Then
Cells(2, Random).Value = vektor(Random)
Cells(3, Random) = Anzahl + 1
vektor(Random) = 0
Anzahl = Anzahl + 1
End If
Wend
Generell geht es hier mehr um eine zufällige Durchmischung wie um eine Zufallszahl. Dies kannst du z.B. einfach erzeugen mittels Hilfsspalte =ZUFALLSZAHL() und anschliessendem sortieren.
cu
Chris

Anzeige
AW: Zufaellige, einmalige Auswahl aus Array
17.05.2016 09:56:00
Daniel
Hi
dein Ausdruck Int((54 - 1 + 1) * Rnd - 1) kann auch 0 und -1 als Ergebnis haben und dann verweist du bei Vektor(Random) auf einen Index, der ausserhalb des definerten Bereichs liegt (das Array ist ja nur von 1-54 definiert, daher funktionieren dann 0 und -1 nicht als Index.
Wenn du Excel 2007 und höher hast, dann erzeuge Ganzzahlige Zufallszahlen in einem bestimmten Bereich besser mit: Worksheetfunction.RandBetween(1, 54), in früheren Versionen mit dieser Formel: Int((54 - 1) * rnd)+1
bachte bitte, dass du RANDOMIZE verwenden musst, damit VBA nicht jedesmal die gleichen Zufallszahlen erzeugt (ist bei Worksheetfunction.RandBetween nicht erforderlich)
Ansonsten würde ich so vorgehen, um prozessicher Zufallszahlen ohne Doppler zu erzeugen:
1. erstelle ein Array 1 to 54 und schreibe die Indexnummer als Wert
2. gehte mit einer Schleife über das Array und tausche jeden Wert einmal mit einem zufällig ausgewählten Wert aus dem Array
3. nimm die ersten x Werte, je nachdem wieviele Zufallszahlen du brauchst.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige