Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zufaellige, einmalige Auswahl aus Array

Forumthread: 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

Anzeige

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
;
Anzeige
Anzeige

Infobox / Tutorial

Zufällige, einmalige Auswahl aus einem Array in Excel


Schritt-für-Schritt-Anleitung

Um zufällige, einmalige Zahlen zwischen 1 und 54 in Excel zu erzeugen, kannst du den folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass jede Zahl nur einmal vorkommt.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub Zufallszahlen()
    Dim vektor(1 To 54) As Integer
    Dim Z As Integer
    Dim Random As Integer
    Dim Anzahl As Integer

    ' Array mit Werten füllen
    For Z = 1 To 54
        vektor(Z) = Z
    Next Z

    ' Zufallszahlen generieren
    Randomize
    While Application.WorksheetFunction.Sum(vektor) > 0
        Random = Int((54 * Rnd) + 1)
        If vektor(Random) > 0 Then
            Cells(2, Random).Value = vektor(Random)
            vektor(Random) = 0
            Anzahl = Anzahl + 1
        End If
    Wend
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro Zufallszahlen aus, um die Werte in der zweiten Zeile deines Arbeitsblatts zu sehen.

Häufige Fehler und Lösungen

  • Error 9: Dieser Fehler tritt häufig auf, wenn auf einen nicht definierten Array-Index zugegriffen wird. Stelle sicher, dass der Index zwischen 1 und 54 liegt.
  • Falsche Zufallszahlen: Achte darauf, Randomize am Anfang des Codes zu verwenden, um unterschiedliche Zufallszahlen zu generieren.
  • Doppelte Zahlen: Wenn du zufällige Zahlen ohne Wiederholungen benötigst, musst du ein Array verwenden, das die Zahlen verwaltet und bereits verwendete Zahlen auf 0 setzt.

Alternative Methoden

Eine einfache Methode, um zufällige Zahlen in Excel zu generieren, besteht darin, die Funktion =ZUFALLSZAHL() zu verwenden. Hierbei kannst du:

  1. In einer Hilfsspalte die Formel =ZUFALLSZAHL() für die Zellen A1 bis A54 eingeben.
  2. Sortiere die Ergebnisse anschließend, um eine zufällige Reihenfolge zu erhalten.

Diese Methode ist besonders nützlich, wenn du nicht mit VBA arbeiten möchtest.


Praktische Beispiele

Angenommen, du möchtest 5 zufällige Zahlen zwischen 1 und 54:

  1. Erstelle ein Array mit den Zahlen 1 bis 54.
  2. Verwende die oben gezeigte VBA-Methode, um die 5 ersten Werte zu extrahieren.
  3. Oder nutze die Formel =INDEX(A$1:A$54; RANG(E1; B$1:B$54; 0)), um die Werte aus einer sortierten Liste zu ziehen.

Tipps für Profis

  • Verwende Option Explicit am Anfang deines Codes, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Überlege, wie viele Zufallszahlen du benötigst, und passe deinen Code entsprechend an.
  • Nutze die WorksheetFunction.RandBetween(1, 54), wenn du Excel 2007 oder höher hast, um Zufallszahlen direkt zu erzeugen, ohne VBA zu verwenden.

FAQ: Häufige Fragen

1. Wie stelle ich sicher, dass die Zufallszahlen immer unterschiedlich sind?
Indem du die verwendeten Zahlen in einem Array auf 0 setzt, nachdem du sie genutzt hast, verhinderst du, dass sie erneut ausgewählt werden.

2. Kann ich die Zufallszahlen in eine bestimmte Zelle schreiben?
Ja, ändere im VBA-Code die Cells(2, Random).Value-Zeile, um die gewünschte Zelle anzupassen.

3. Funktioniert das auch in Excel Online?
Der VBA-Code funktioniert nur in Desktop-Versionen von Excel. Für Excel Online musst du alternative Methoden wie die ZUFALLSZAHL()-Funktion verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige