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

Forumthread: VBA Zufallszahlen ohne Wiederholung

VBA Zufallszahlen ohne Wiederholung
26.10.2015 13:13:15
Bonduca01
Hallo,
ich habe in Tabelle A Spalte I Zahlen zwischen 1-2000.
In Tabelle B Spalte I sollen Zufallszahlen zwischen 1000-2000 geschrieben werden. Diese sollen nicht doppelt vorkommen und auch nicht mit den Zahlen aus Tabelle A Spalte I übereinstimmen.
Den Code, den ich habe gibt mir zwar Zufallszahlen aus, berücksichtigt aber nicht, dass keine doppelten ausgegeben werden dürfen und dass diese Zahlen nicht mit Tabelle A Spalte I übereinstimmen dürfen.
Sub Zufallszahlen_rekombination()
Dim Zahl1 As Variant
Dim Zahl2 As Variant
Untergrenze = 1000
Obergrenze = 2000
Worksheets("B").Activate
For i = 1 To 200
Randomize Timer
Sheets("B").Cells(26 + i, 9) = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Next i
End Sub
Kann mir hiermit jemand helfen?
Vielen Dank!

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Zufallszahlen ohne Wiederholung
26.10.2015 13:29:53
ede
Hallo,
anbei mal Deine Code um die beiden Prüfschleifen erweitert

Sub Zufallszahlen_rekombination()
Dim Zahl1 As Variant
Dim Zahl2 As Variant
Dim zz As Variant
Untergrenze = 1000
Obergrenze = 2000
Worksheets("B").Activate
For i = 1 To 200
Randomize Timer
zz = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
flag = True
'Prüfe ob in Tabelle "A" ist
For ii = 1 To 2000
If Sheets("A").Cells(ii, 9) = zz Then
'bereits in Tabelle "A"  vorhanden
flag = False
End If
Next ii
'Prüfe ob in Tabelle "B" ist
For ii = 1 To ii
If Sheets("B").Cells(ii + 26, 9) = zz Then
'bereits in Tabelle "B"  vorhanden
flag = False
End If
Next ii
' vorhandaen?
If flag Then
'wegschreiben
Sheets("B").Cells(26 + i, 9) = zz
Else
'schleife eins zurück, da zz schon vorhanden
i = i - 1
End If
Next i
End Sub

Gruss

Anzeige
AW: VBA Zufallszahlen ohne Wiederholung
27.10.2015 17:31:28
Bonduca01
Funktioniert wie geschmiert!
Vielen, vielen Dank!!!!!
:D

AW: VBA Zufallszahlen ohne Wiederholung
26.10.2015 13:30:43
Rudi
Hallo,
Sub Zufallszahlen_rekombination()
Dim Zahl1 As Variant
Dim i As Integer
Const Untergrenze = 1000
constObergrenze = 2000
Worksheets("B").Activate
Do While i 

Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Zufallszahlen ohne Wiederholung in Excel


Schritt-für-Schritt-Anleitung

Um in Excel Zufallszahlen ohne Wiederholung zu generieren, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne die Excel-Datei mit den Tabellenblättern „A“ und „B“.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ > Einfügen > Modul.
  4. Kopiere den folgenden VBA-Code in das Modul:

    Sub Zufallszahlen_rekombination()
       Dim zz As Variant
       Dim Untergrenze As Integer
       Dim Obergrenze As Integer
       Dim i As Integer
       Dim flag As Boolean
    
       Untergrenze = 1000
       Obergrenze = 2000
       Worksheets("B").Activate
    
       For i = 1 To 200
           Randomize Timer
           zz = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
           flag = True
    
           ' Prüfe, ob die Zahl schon in Tabelle A vorhanden ist
           For ii = 1 To 2000
               If Sheets("A").Cells(ii, 9) = zz Then
                   flag = False
                   Exit For
               End If
           Next ii
    
           ' Prüfe, ob die Zahl schon in Tabelle B vorhanden ist
           For ii = 1 To i
               If Sheets("B").Cells(26 + ii, 9) = zz Then
                   flag = False
                   Exit For
               End If
           Next ii
    
           ' Wenn die Zahl nicht vorhanden ist, schreibe sie in Tabelle B
           If flag Then
               Sheets("B").Cells(26 + i, 9) = zz
           Else
               i = i - 1 ' Schleife eins zurück, da zz schon vorhanden
           End If
       Next i
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.
  6. Führe das Makro aus: Gehe zu Entwicklertools > Makros > wähle Zufallszahlen_rekombination und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Problem: Das Makro generiert doppelte Zahlen.

    • Lösung: Stelle sicher, dass die Schleifen zum Überprüfen auf Duplikate korrekt implementiert sind.
  • Problem: Zufallszahlen stimmen mit Werten in Tabelle A überein.

    • Lösung: Überprüfe die Logik in der Schleife, die die Zahlen in Tabelle A überprüft.
  • Problem: Der Bereich für Zufallszahlen ist nicht korrekt.

    • Lösung: Achte darauf, die Werte für Untergrenze und Obergrenze richtig zu setzen.

Alternative Methoden

Wenn Du eine einfache Lösung ohne VBA bevorzugst, kannst Du die Funktion ZUFALLSZAHL() in Excel verwenden:

  1. Gib in Zelle I26 (Tabelle B) folgende Formel ein:
    =WENNFEHLER(WAHL(GANZZAHL(ZUFALLSZAHL()*200)+1;EINDEUTIGE(A1:A200));"")
  2. Ziehe die Zelle nach unten, um weitere Zufallszahlen zu generieren.

Diese Methode hat allerdings den Nachteil, dass sie nicht immer sicherstellt, dass die Zahlen ohne Wiederholung sind.


Praktische Beispiele

Hier sind einige praktische Anwendungsfälle für das Generieren von Zufallszahlen ohne Wiederholung:

  • Zufallsgenerator für Lotterien: Erstelle eine Liste von Lotteriezahlen, die nicht wiederholt werden.
  • Zufalls-Auswahl von Teilnehmern: Wähle Teilnehmer für eine Verlosung aus einer Liste ohne Wiederholung.
  • Zufallsgenerator für Spiele: Generiere zufällige Punkte oder Items in Spielen.

Tipps für Profis

  • Nutze die Randomize-Funktion in VBA, um sicherzustellen, dass die Zufallszahlen nicht immer gleich sind.
  • Wenn Du große Datenmengen bearbeitest, erwäge die Verwendung von Arrays, um die Effizienz zu steigern.
  • Du kannst auch eine Zufallsmatrix ohne Wiederholung erstellen, indem Du ein 2D-Array nutzt.

FAQ: Häufige Fragen

1. Wie kann ich die Zufallszahlen in einem bestimmten Bereich generieren? Du kannst die Werte für Untergrenze und Obergrenze im VBA-Code anpassen.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren. Achte darauf, dass die Entwicklertools aktiviert sind.

3. Was ist der Unterschied zwischen ZUFALLSZAHL() und VBA für Zufallszahlen? ZUFALLSZAHL() ist eine Excel-Funktion, die jedoch keine Kontrolle über Wiederholungen bietet, während VBA mehr Flexibilität und Kontrolle ermöglicht.

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