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

Forumthread: VBA-Zufallszahlen generieren

VBA-Zufallszahlen generieren
reiner
Hallo Leute,
die Zellen A2, C2, E2, G2, I2 sollen jeweils willkürlich ermittelte Farben (rot, grün, blau, magenta, schwarz, grau, gelb oder orange) die mit einem Zufallsgenerator erzeugt werden, annehmen. Wenn sich aus den 8 genannten Farben eine willkürliche Farbfolge nicht ermitteln lässt, wäre auch eine Ermittlung von Zufallszahlen die anschließend in Farben "umgerechnet" werden, ausreichend.
Es sollte aber wahlweise möglich sein, doppelte Farben zuzulassen bzw. auszuschließen.
Der bislang eingesetzten Zufallsgenerator ist zwar im Prinzip ausreichend, lässt aber keine Möglichkeit Doppelungen zuzulassen bzw. auszuschließen:
Set Bereich = Range("A2:I2")

For Each Zelle In Bereich
Zelle.Value = Int((8000 * Rnd) + 1)
Next Zelle

mfg
reiner
Anzeige
AW: VBA-Zufallszahlen generieren
15.08.2012 09:33:12
{Boris}
Hi Reiner,
ich weiß nicht, ob es einfacher geht, aber das ist das Prinzip der ganzzahligen Zufallszahlen ohne Wiederholung, wie wir es auch auf unserer Seite beschrieben haben.
Vorgehen:
Ein Array von (in Deinem Fall) 8000 Zufallszahlen erzeugen und dann nacheinander die kleinste, zweitkleinste, drittkleinste etc. vergleichen.
Z.B. so:
Sub test()
Dim arr(8000), y(100)
Dim x As Long
Randomize Timer
For x = 1 To 8000
arr(x) = Rnd
Next x
For x = 1 To 100
y(x) = WorksheetFunction.Match(WorksheetFunction.Small(arr, x), arr, 0)
Next x
MsgBox y(1)
End Sub
Das y-Array enthält jetzt 100 ganzzahlige Zufallszahlen im Bereich 1 bis 8000 ohne Wiederholung.
VG, Boris
Anzeige
AW: VBA-Zufallszahlen generieren
15.08.2012 10:19:08
reiner
hallo Boris,
du verweist auf "deine Seite"; wo finde ich diese Seite?
Gibt es dort weiterführende Informationen über die Erzeugung von Zufallszahlen?
mfg
reiner
AW: VBA-Zufallszahlen generieren
15.08.2012 10:36:25
{Boris}
Hi Reiner,
sorry - es geht um http://www.excelformeln.de - aber da geht es halt nur um Formeln und nicht um VBA. Wenn Du dort in der Suche Zufallszahl eingibst, findest Du einiges dazu.
VG, Boris
Anzeige
AW: VBA-Zufallszahlen generieren
15.08.2012 11:37:04
Dirk
Hallo Reiner,
wieviel verschieden Zahlen brauchst Du denn? Sind es wirklich 8000?
Gruss
Dirk aus Dubai
AW: VBA-Zufallszahlen generieren
15.08.2012 12:00:21
reiner
hallo Dirk,
eigentlich geht es nicht um Zahlen sondern um 8 Farben (rot, grün, blau, magenta, schwarz, grau, gelb oder orange); Zahlen sind in diesem Fall nur Hilfsmittel denen abschließend eine Farbe zugeordnet wird.
Es sollen 5 Farben willkürlich in den Zellen A5, C5, E5, G5, I5 angeordnet werden, ohne Doppelungen; Doppelungen sollten aber dennoch(umschaltbar) auch möglich sein.
mfg
reiner
Anzeige
AW: VBA-Zufallszahlen generieren
15.08.2012 12:32:50
{Boris}
Hi Reiner,
Sub test()
Dim arr(7), y(7)
Dim x As Long, Farbe As Long
Randomize Timer
For x = 0 To 7
arr(x) = Rnd
Next x
For x = 0 To 4
y(x) = WorksheetFunction.Match(WorksheetFunction.Small(arr, x + 1), arr, 0)
Select Case y(x)
Case 1: Farbe = 3
Case 2: Farbe = 6
Case 3: Farbe = 12
Case 4: Farbe = 20
Case 5: Farbe = 30
Case 6: Farbe = 40
Case 7: Farbe = 50
Case 8: Farbe = 53
End Select
y(x) = Farbe
Next x
For x = 0 To 4
Cells(5, (x + 1) * 2 - 1).Interior.ColorIndex = y(x)
Next x
End Sub
Die Farbcode musst Du anpassen.
VG, Boris
Anzeige
AW: VBA-Zufallszahlen generieren
15.08.2012 13:28:39
reiner
hallo Boris,
dieser Vorschlag gefällt mir ausgezeichnet, jede Farbe erscheint nur 1 mal.
Ist es sehr aufwendig die Programmierung zu erweitern sodass eine beliebige Farbe doppelt vorkommt?
mfg
reiner
Zufällig eine Farbe doppelt
15.08.2012 17:19:22
{Boris}
Hi Reiner,
Sub test()
Dim arr(7), y(7), z As Long
Dim x As Long, Farbe As Long
Randomize Timer
'8 Zufallszahlen erzeugen und in arr speichern
For x = 0 To 7
arr(x) = Rnd
Next x
'aus den 8 Zufallszahlen die Positionen der 5 kleinsten in y speichern
For x = 0 To 4
y(x) = WorksheetFunction.Match(WorksheetFunction.Small(arr, x + 1), arr, 0)
'und anhand der Position 1 bis 8 eine Farbe zuweisen
Select Case y(x)
Case 1: Farbe = 3
Case 2: Farbe = 6
Case 3: Farbe = 12
Case 4: Farbe = 20
Case 5: Farbe = 30
Case 6: Farbe = 40
Case 7: Farbe = 50
Case 8: Farbe = 53
End Select
y(x) = Farbe
Next x
'Zellen mit den 5 Farben färben
For x = 0 To 4
Cells(5, (x + 1) * 2 - 1).Interior.ColorIndex = y(x)
Next x
'per Zufall eine Farbe doppelt vergeben
z = Int(5 * Rnd)
Do
t = Int(5 * Rnd)
Loop Until t  z
Cells(5, (t + 1) * 2 - 1).Interior.ColorIndex = y(z)
End Sub
VG, Boris
Anzeige
Uups - kein Option Explicit...
15.08.2012 17:36:15
{Boris}
...und schon hab ich die Variable t nicht deklariert:
t As Long
muss es der Vollständigkeit halber im Deklarationsteil noch heißen.
VG, Boris
AW: Uups - kein Option Explicit...
15.08.2012 21:56:19
reiner
hallo Boris,
super, ich bin ehrlich begeistert
vielen Dank
mfg
reiner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Zufallszahlen und Farben generieren


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA Zufallszahlen und Farben zu generieren, kannst du den folgenden Schritten folgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf deinen Projektordner im Projekt-Explorer, wähle Einfügen und dann Modul.

  3. Code einfügen: Füge den nachfolgenden VBA-Code in das Modul ein:

    Sub FarbenZufallsgenerator()
       Dim arr(7), y(7), z As Long
       Dim x As Long, Farbe As Long
       Randomize Timer
       ' 8 Zufallszahlen erzeugen und in arr speichern
       For x = 0 To 7
           arr(x) = Rnd
       Next x
       ' aus den 8 Zufallszahlen die Positionen der 5 kleinsten in y speichern
       For x = 0 To 4
           y(x) = WorksheetFunction.Match(WorksheetFunction.Small(arr, x + 1), arr, 0)
           ' und anhand der Position 1 bis 8 eine Farbe zuweisen
           Select Case y(x)
               Case 1: Farbe = 3   ' Beispiel: Rot
               Case 2: Farbe = 6   ' Beispiel: Grün
               Case 3: Farbe = 12  ' Beispiel: Blau
               Case 4: Farbe = 20  ' Beispiel: Magenta
               Case 5: Farbe = 30  ' Beispiel: Schwarz
               Case 6: Farbe = 40  ' Beispiel: Grau
               Case 7: Farbe = 50  ' Beispiel: Gelb
               Case 8: Farbe = 53  ' Beispiel: Orange
           End Select
           y(x) = Farbe
       Next x
       ' Zellen mit den 5 Farben färben
       For x = 0 To 4
           Cells(5, (x + 1) * 2 - 1).Interior.ColorIndex = y(x)
       Next x
       ' per Zufall eine Farbe doppelt vergeben
       z = Int(5 * Rnd)
       Dim t As Long
       Do
           t = Int(5 * Rnd)
       Loop Until t <> z
       Cells(5, (t + 1) * 2 - 1).Interior.ColorIndex = y(z)
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler: "Variable nicht definiert"
    Lösung: Stelle sicher, dass alle Variablen korrekt deklariert sind, insbesondere die Variable t. Füge Dim t As Long im Deklarationsteil hinzu.

  • Fehler: Zellen werden nicht gefärbt
    Lösung: Überprüfe, ob du die richtigen Zellreferenzen in Cells(5, ...) verwendest. Achte darauf, dass das Makro in einem Arbeitsblatt ausgeführt wird, das Zellen in der Zeile 5 enthält.


Alternative Methoden

Du kannst auch Excel-Formeln verwenden, um Zufallszahlen zu generieren. Mit der Formel =RANDBETWEEN(1, 100) kannst du Zufallszahlen zwischen 1 und 100 erzeugen. Für Farben könntest du eine bedingte Formatierung in Verbindung mit einer Zufallszahl verwenden, um Zellen in verschiedenen Farben darzustellen.


Praktische Beispiele

  1. Zufallszahlen zwischen 1 und 6:

    Sub ZufallszahlWurf()
       Dim wurf As Integer
       wurf = Int((6 * Rnd) + 1)
       MsgBox "Der Wurf ergibt: " & wurf
    End Sub
  2. Zufallsfarbe aus einer Liste:

    Sub Zufallsfarbe()
       Dim farben As Variant
       farben = Array("Rot", "Grün", "Blau", "Magenta", "Schwarz", "Grau", "Gelb", "Orange")
       Cells(1, 1).Interior.ColorIndex = Application.WorksheetFunction.RandBetween(1, 8)
    End Sub

Tipps für Profis

  • Nutze Application.Volatile in deinen Funktionen, um sicherzustellen, dass sie bei jeder Berechnung neu ausgewertet werden.
  • Experimentiere mit verschiedenen ColorIndex-Werten, um eine breitere Palette an Farben zu erhalten.
  • Erstelle ein benutzerdefiniertes Zufallszahlensystem, indem du eigene Algorithmen in VBA implementierst.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass eine Farbe nicht doppelt vergeben wird?
Du kannst eine einfache Logik in deinem VBA-Code verwenden, um die bereits verwendeten Farben zu speichern und zu verhindern, dass sie erneut ausgewählt werden.

2. Ist es möglich, Zufallszahlen aus einer bestimmten Liste zu generieren?
Ja, du kannst ein Array verwenden, das die gewünschten Werte enthält, und dann mit Rnd eine Zufallszahl generieren, um einen Index für das Array auszuwählen.

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