Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: excel zufallszahl ohne wiederholung

excel zufallszahl ohne wiederholung
25.10.2016 11:09:12
Dennis
guten tag zusammen,
ich habe mal eine frage hier, ich habe mir ein vba zusammengebastelt für die zufallszahl mein problem ist jetzt aber das er mir auch doppelte zahlen ausspuckt, das möchte ich gerne vermeiden. vielleicht könnte mir jemand behilflich sein bei meinem problem.
https://www.herber.de/bbs/user/109003.xlsm
vielen dank
dennis
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: excel zufallszahl ohne wiederholung
25.10.2016 11:15:59
Rudi
Hallo,
Sub ZufallszahlenErzeugen()
Dim Bereich As Range
Dim zelle As Range
Dim objZufall As Object
Set objZufall = CreateObject("scripting.dictionary")
Set Bereich = Range("A1:A10")
Do While objZufall.Count 

Gruß
Rudi
AW: excel zufallszahl ohne wiederholung
25.10.2016 11:21:44
Dennis
vielen lieben dank rudi, genau das habe ich gesucht und gefunden. danke sehr.
Anzeige
noch a bissl Senf
25.10.2016 18:20:59
Michael
Hi zusammen,
Rudis Code ist super übersichtlich und sieht höchst einfach aus, auch wenn das Dictionary schon ein Griff in die Trickkiste ist.
Was mir aus eher theoretischen Gründen daran aufstößt, ist, daß die Schleife "unvorhersehbar oft" durchlaufen wird.
Weil das Problem immer wieder auftaucht, möchte habe ich mal eine allgemeine Lösung vorstellen, bei der die Anzahl der Schleifendurchläufe exakt bestimmt ist - mein Beitrag zum Stromsparen, hehe:
Option Explicit
Function Zufallszahlen(von&, bis&, anzahl&, Optional typ As Long = 1)
' "Standardfunktion" für Ziehung ohne Doppelte
' Wertebereich von..bis: ***************
'   von: kleinerer Wert
'   bis: größerer Wert
' anzahl: Anzahl der zu ziehenden Zahlen
' optionale Typangabe: *****************
'   0: eindimensionales Array
'   sonst: zweidimensionales Array hoch
Dim aIn, aOut
Dim i&, k&
' hier ist Raum für Plausibilitätsprüfungen:
' a) ist von 
Schöne Grüße,
Michael
Anzeige
AW: excel zufallszahl ohne wiederholung
25.10.2016 11:18:45
Matthias
Hallo
Option Explicit
Sub Zufall()
Dim rng As Range, rngAll As Range
Dim iRandomize As Integer
Set rngAll = Range("A1:A10")
Randomize
rngAll.ClearContents
For Each rng In rngAll.Cells
iRandomize = Int((20 * Rnd) + 1)
Do Until WorksheetFunction.CountIf(rngAll, iRandomize) = 0
iRandomize = Int((20 * Rnd) + 1)
Loop
rng.Value = iRandomize
Next rng
End Sub
Quelle:
https://www.herber.de/forum/archiv/960to964/962897_Zufallszahl.html#962906
Gruß Matthias
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zufallszahlen in Excel ohne Wiederholung generieren


Schritt-für-Schritt-Anleitung

Um in Excel Zufallszahlen ohne Wiederholung zu generieren, kannst du die folgende VBA-Funktion verwenden. Diese Methode ist besonders nützlich, wenn du eine Liste von Zahlen oder anderen Werten zufällig auswählen möchtest, ohne dass es Duplikate gibt.

  1. Öffne Excel und gehe zu den Entwicklertools.

    • Falls die Entwicklertools nicht sichtbar sind, aktiviere sie über die Excel-Optionen.
  2. Füge ein neues Modul hinzu.

    • Klicke auf "Visual Basic" und dann im Menü auf "Einfügen" > "Modul".
  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    
    Sub ZufallszahlenErzeugen()
       Dim Bereich As Range
       Dim zelle As Range
       Dim objZufall As Object
       Set objZufall = CreateObject("scripting.dictionary")
       Set Bereich = Range("A1:A10") ' Definiere den Bereich für die Zufallszahlen
    
       Do While objZufall.Count < Bereich.Cells.Count
           Dim zufallszahl As Integer
           zufallszahl = Int((20 * Rnd) + 1) ' Zufallszahl zwischen 1 und 20
           If Not objZufall.Exists(zufallszahl) Then
               objZufall.Add zufallszahl, Nothing
           End If
       Loop
    
       Dim i As Integer
       i = 1
       For Each zelle In Bereich
           zelle.Value = objZufall.Keys()(i - 1)
           i = i + 1
       Next zelle
    End Sub
  4. Führe das Skript aus.

    • Stelle sicher, dass der Bereich A1:A10 in deinem Arbeitsblatt korrekt definiert ist und führe das Makro aus, um die Zufallszahlen zu generieren.

Häufige Fehler und Lösungen

  • Doppelte Zahlen werden generiert:

    • Stelle sicher, dass du die Randomize-Anweisung vor der Zufallszahlengenerierung verwendest, um die Zufallszahlen zu initialisieren.
  • Fehlermeldung beim Ausführen des Makros:

    • Überprüfe, ob das Modul korrekt eingefügt wurde und keine Syntaxfehler im Code vorhanden sind.

Alternative Methoden

  1. Excel-Funktion nutzen:

    • Du kannst auch die Funktion =RANDBETWEEN() in Kombination mit einer Hilfsspalte verwenden, um Zufallszahlen zu generieren und dann die Duplikate manuell zu entfernen.
  2. Zufallsgenerator für Listen:

    • Wenn du eine zufällige Auswahl aus einer Liste ohne Wiederholung treffen möchtest, kannst du auch die Funktion INDEX() zusammen mit RANDBETWEEN() nutzen.

Praktische Beispiele

  • Zufallszahlen zwischen zwei Werten:

    Wenn du Zufallszahlen zwischen 1 und 100 generieren möchtest, kannst du den Code entsprechend anpassen:

    zufallszahl = Int((100 * Rnd) + 1) ' Zufallszahl zwischen 1 und 100
  • Zufällige Auswahl aus Liste:

    Um eine zufällige Auswahl aus einer Liste zu treffen, kannst du folgendes verwenden:

    Dim liste As Variant
    liste = Array("Apfel", "Banane", "Kirsche")
    Dim randomIndex As Integer
    randomIndex = Int((UBound(liste) + 1) * Rnd)
    MsgBox liste(randomIndex) ' Gibt einen zufälligen Wert aus der Liste zurück

Tipps für Profis

  • Optimierung des Codes:

    • Verwende die Dictionary-Objekte, um die Performance zu verbessern, insbesondere bei größeren Datenmengen.
  • Eingabewerte validieren:

    • Füge Plausibilitätsprüfungen hinzu, um sicherzustellen, dass die Anzahl der zu ziehenden Zahlen nicht größer ist als die Anzahl der verfügbaren Optionen.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Zufallszahlen in einem bestimmten Bereich liegen?
Verwende die RANDBETWEEN()-Funktion oder passe die Berechnung der Zufallszahlen im VBA-Code entsprechend an.

2. Was ist der Unterschied zwischen Randomize und Rnd?
Randomize initialisiert den Zufallszahlengenerator, während Rnd die Zufallszahl selbst generiert. Verwende Randomize nur einmal vor der ersten Verwendung von Rnd.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige