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

Forumthread: Zufallszahl - Werte ausschließen

Zufallszahl - Werte ausschließen
10.09.2020 10:24:18
Julian
Moin zusammen,
auf Knopfdruck (Makro) soll eine Zufallszahl zwischen 1 und 1000 in Tabellenblatt 1, E2 geschrieben werden. Dafür habe ich folgenden VBA-Code, der gut funktioniert:
Worksheets("Tabelle1").Range("E2").Value = Int((1000 - 1 + 1) * Rnd + 1)
Danach soll nichts weiter geschehen. Die Zahl bleibt solange in E2 stehen, bis ich wieder das Makro aktiviere und die Zahl mit einer neuen Zufallszahl überschrieben wird.
Jetzt kommt noch folgende Bedingung hinzu:
In Tabellenblatt 2 ist eine Liste, Spalte A:A mit n Zahlen zwischen 1 und 1000. Diese Liste wird unabhängig von dem Zufallsgenerator laufend ergänzt. Sobald in dieser Liste eine Zahl auftaucht, beispielsweise die 67, darf der Zufallsgenerator die 67 nicht mehr ausgeben, usw.
Leider sind meine VBA-Kenntnisse bescheiden. Ich bin mir aber sicher, dass ich eine Art DO LOOP brauche, die so lange eine Zufallszahl ermittelt, bis er eine Zahl hat, die nicht in der Liste in Tabellenblatt 2 steht. Diese Zahl schreibt er dann in Tabelle 1, E2 rein. Leider hat mir meine deutsch- und englischsprachige Google-Suche nicht viel geliefert, was ich nutzen und ggf. anpassen konnte.
Könnt ihr mir weiterhelfen?
Vielen Dank!!
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zufallszahl - Werte ausschließen
10.09.2020 10:29:12
Joachim
Mach es umgekehrt.
Schreib in eine Liste alle Zahlen und lösche die, die nicht mehr gezogen werden sollen.
Dann suchst Du eine Zufallszahl aber nicht zw. 1 und 1000 sondern zw. 1 und z.B. 990 wenn schon 10 Zahlen gestrichen sind.
Dann suchst Du mit Rang nach der Zahl, die deiner Zufallszahl zugeordnet ist.
OK?
Gruß
Anzeige
AW: Zufallszahl - Werte ausschließen
10.09.2020 11:30:41
Julian
Hi Joachim,
Danke für deine schnelle Antwort! Für das, was ich vorhabe, ist dein Vorgehen eher ungeeignet. Insgesamt wäre es für mich einfacher, wenn der Zufallsgenerator um die Liste eingeschränkt wird. Die Liste mit den einzuschränkenden zahlen ist auch bereits automatisiert. Das letzte Puzzlestück ist jetzt der Zufallsgenerator.
Viele Grüße!
Anzeige
AW: Zufallszahl - Werte ausschließen
10.09.2020 11:38:59
Daniel
Hi
im Prinzip so:
DO
x = Worksheetfunction.RandBetween(1, 1000)
Loop Until Worksheetfunction.CountIf(Sheets("Tabelle2").Columns(1), x) = 0
Range("E2").value = x
wenn du ganzzahlige Zufallszahlen brauchst, ist die Excelfunktion Zufallsbereich einfacher und sie erfordert kein Randomize, um sich wiederholende Zahlenfolgen nach einem Neustart zu vermeiden.
sollte es mal vorkommen können, dass wirklich alle möglichen Zahlen ausgeschlossen sind, müsste man das vorab prüfen, sonst landest du in einer Endlosschleife
Gruß Daniel
Anzeige
AW: Zufallszahl - Werte ausschließen
10.09.2020 15:13:07
Julian
Hi Daniel,
vielen, vielen Dank! Funktioniert perfekt! Konnte noch ein, zwei Dinge für meine Bedürfnisse anpassen, aber dein Code war genau das, was ich gesucht habe. Ich muss mir mal dringend die VBA Syntax raufschaffen...
Danke!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zufallszahlen in Excel generieren und ausschließen


Schritt-für-Schritt-Anleitung

Um eine Zufallszahl in Excel zu generieren und dabei bestimmte Werte auszuschließen, kannst du den folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass eine Zufallszahl zwischen 1 und 1000 in die Zelle E2 des ersten Tabellenblatts geschrieben wird, wobei Werte, die in einer Liste im zweiten Tabellenblatt stehen, ausgeschlossen werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden Code in das Modul:

    Sub ZufallszahlGenerieren()
       Dim x As Integer
       Do
           x = Application.WorksheetFunction.RandBetween(1, 1000)
       Loop Until Application.WorksheetFunction.CountIf(Sheets("Tabelle2").Columns(1), x) = 0
       Worksheets("Tabelle1").Range("E2").Value = x
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Um das Makro auszuführen, drücke ALT + F8, wähle ZufallszahlGenerieren und klicke auf Ausführen.

Dieser Code verwendet die Funktion RandBetween, um eine Zufallszahl zwischen 1 und 1000 zu generieren, und überprüft mit CountIf, ob diese Zahl in der Liste auf dem zweiten Tabellenblatt vorhanden ist.


Häufige Fehler und Lösungen

  • Endlosschleife: Wenn alle möglichen Zahlen ausgeschlossen sind, kann der Code in eine Endlosschleife geraten. Stelle sicher, dass immer mindestens eine Zahl zur Verfügung steht, um dies zu vermeiden.

  • Falsches Tabellenblatt: Überprüfe, ob die Tabellennamen ("Tabelle1" und "Tabelle2") korrekt sind und dass die Liste der auszuschließenden Zahlen im richtigen Format vorliegt.


Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, kannst du auch die Excel-Funktion Zufallsbereich nutzen, um Zufallszahlen zu erzeugen. Beachte jedoch, dass diese Methode keine Bedingungen zum Ausschließen von Werten unterstützt.

  1. Verwende die Formel:
    =ZUFALLSBEREICH(1;1000)
  2. Diese Formel generiert eine Zufallszahl zwischen 1 und 1000, ohne jedoch die Möglichkeit, Werte auszuschließen.

Praktische Beispiele

  • Zufallszahl zwischen 1 und 10:

    x = Application.WorksheetFunction.RandBetween(1, 10)
  • Zufallszahl zwischen 1000 und 9999:

    x = Application.WorksheetFunction.RandBetween(1000, 9999)

In beiden Fällen kannst du die Grundstruktur des oben genannten VBA-Codes verwenden und die Werte entsprechend anpassen.


Tipps für Profis

  • Verwende den Zufallswert-Befehl, wenn du nicht nur ganze Zahlen, sondern auch Dezimalzahlen benötigst.

  • Wenn du häufig mit Zufallszahlen arbeitest, erstelle eine Funktion, die die Generierung und das Ausschließen automatisiert, um Zeit zu sparen.

  • Bedenke, dass Excel bei jedem Neuladen des Arbeitsblatts neue Zufallszahlen generiert. Wenn du eine Zufallszahl fixieren möchtest, kopiere sie und füge sie als Wert ein.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die generierte Zufallszahl nicht in einer bestimmten Liste ist? Du kannst die oben gezeigte Methode mit der CountIf-Funktion verwenden, um zu überprüfen, ob die Zufallszahl in der Liste vorhanden ist.

2. Kann ich den Zufallsbereich ändern? Ja, du kannst die Werte in der RandBetween-Funktion anpassen, um Zufallszahlen in jedem gewünschten Bereich zu generieren, z.B. zwischen 1 und 10 oder zwischen 1000 und 9999.

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