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

VBA - Zahlen nicht so zufällig wie gewollt

Forumthread: VBA - Zahlen nicht so zufällig wie gewollt

VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 16:43:44
Christian
Hallo,

ich wollte mir eigentlich ein gaz einfaches Makro schreiben, dass mir 3 Zahlen zwischen 0 und 255 in die Zellen A1:A3 schreibt, daraus einen RGB Code bildet und die Füllfarbe der Zelle A4 auf diesen Code setzt.

Soweit wie unten bin ich, aber jedes mal wenn ich das Makro ausführe, werden 3 identische Zahlen ausgegeben, wo liegt mein Fehler?


Sub Farben()
Dim rgbColor As Long
Range("A1:A3").Value = Array(Int(256 * Rnd), Int(256 * Rnd), Int(256 * Rnd))
rgbColor = RGB(Range("A1").Value, Range("A2").Value, Range("A3").Value)
Range("A4").Interior.Color = rgbColor
End Sub


Danke
Christian
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 16:51:30
Raimund
Hi Christian

Mit Hilfe von KI

Der Fehler in deinem Makro liegt in der Verwendung der Rnd-Funktion, die nur einmal einen Zufallswert generiert, wenn du sie innerhalb eines Arrays verwendest. Um sicherzustellen, dass du bei jedem Aufruf des Makros unterschiedliche Zufallszahlen erhältst, solltest du die Zufallszahlenerzeugung für jede Zelle einzeln durchführen.

Hier ist die korrigierte Version deines Makros:

Sub Farben()

Dim rgbColor As Long
Dim i As Integer

' Initialisiert den Zufallszahlengenerator
Randomize

' Generiere 3 zufällige Zahlen zwischen 0 und 255
For i = 1 To 3
Cells(i, 1).Value = Int(256 * Rnd)
Next i

' Bildet den RGB-Code
rgbColor = RGB(Cells(1, 1).Value, Cells(2, 1).Value, Cells(3, 1).Value)

' Setzt die Füllfarbe der Zelle A4
Cells(4, 1).Interior.Color = rgbColor
End Sub


Änderungen:
Randomize: Diese Funktion initialisiert den Zufallszahlengenerator, sodass du bei jedem Makroaufruf unterschiedliche Zufallszahlen erhältst.
Schleife: Eine Schleife (For i = 1 To 3) wird verwendet, um die Zufallszahlen für jede Zelle (A1 bis A3) einzeln zu setzen.
Mit dieser Anpassung solltest du nun bei jedem Ausführen des Makros unterschiedliche RGB-Werte erhalten, und die Zelle A4 wird mit der entsprechenden Farbe gefüllt.

Gruss

Raimund
Anzeige
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 17:28:06
daniel
HI
folgendes Problem:
die RND-Funktion kannst du dir vorstellen wie eine feste Liste mit c.a. 2 Millionen Zahlenwerten.
immer wenn die RND-Funktion ausgeführt wird, wird der nächste Wert aus der Liste ausgegeben.
Wenn du Excel neu startest, dann bist du auch am Anfang der Liste und bekommst so mit immer auch die gleichen Zahlen.
Daher braucht man immer die Funktion RANDOMIZE einmal am Anfang, weil dich dann für die nächste Ausgabe irgendwo in der Liste positioniert.
Ohne bekommt man immer die selben Zahlen.

Wenn du sowieso Ganzzahlen benötigst, nimm besser Worksheetfunction.RandBetween(untergrenze, obergrenze)
das braucht kein Randomize und du kannst die Grenzen direkt angeben, ohne was rechnen zu müssen:

rgbColor = RGB(Worksheetfunction.RandBetween(0, 255), Worksheetfunction.RandBetween(0, 255), Worksheetfunction.RandBetween(0, 255))

zur verkürzung des Codes kann man auch die WITH-Klammer verwenden:
WITH Worksheetfunction

rgbColor = RGB(.RandBetween(0, 255), .RandBetween(0, 255), .RandBetween(0, 255))
End With

Gruß Daniel
Anzeige
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 22:24:23
Ulf
Noch ein Senf


Sub Farben()
Dim rgbColor As Long
Dim arr As Variant
arr = Array(Int(256 * Rnd * Timer / 86400), Int(256 * Rnd * Timer / 86400), Int(256 * Rnd * Timer / 86400))
rgbColor = RGB(arr(0), arr(1), arr(2))
Range("A4").Interior.Color = rgbColor
End Sub
Anzeige
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 17:52:18
Christian
Hallo Daniel,

und wie schreibe ich diese Werte dann in die Zellen A1:A3 wenn ich das mit der Worksheet Function mache?
Die 3 Zahlen in den zellen sind das wichtigste, das Färben von A4 ist eigentlich nur als Art Vorschau gedacht.

Und was ich auch beim Testen nicht verstanden habe, warum funktioniert das Randomize nur wenn ich wie von Raimund vorgeschlagen eine Schleife nutze, statt meinem Array.
Im Array sind auch mit Randomize die Ergebnisse identisch geblieben.

Raimund, der KI Vorschlag funktioniert.

Danke schonmal euch beiden
Christian
Anzeige
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 18:24:50
Yal
Hallo Christian,

einfach die beiden Codings miteinander vergleichen und selber entdecken, wo die beiden sich treffen sollen.

Am Ende sieht so aus
Sub Farben()

Dim rgbColor As Long
With WorksheetFunction
Range("A1:A3").Value = Array(.RandBetween(0, 255), .RandBetween(0, 255), .RandBetween(0, 255))
End With
rgbColor = RGB(Range("A1").Value, Range("A2").Value, Range("A3").Value)
Range("A4").Interior.Color = rgbColor
End Sub

Alternativ so:
Sub Farben()

Dim Z As Range

For Each Z In Range("A1:A3")
Z.Value = WorksheetFunction.RandBetween(0, 255)
Next
rgbColor = RGB(Range("A1").Value, Range("A2").Value, Range("A3").Value)
Range("A4").Interior.Color = rgbColor
End Sub

VG
Yal
Anzeige
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 18:31:41
Christian
Hallo Yal,

ok da hätte ich wirklich selbst drauf kommen müssen.

Danke dir auf jeden Fall
Christian
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 18:33:44
Christian
Hallo Yal,

sorry war zu voreilig, nur der 2. Code klappt, der erste gibt wieder 3 identische Zahlen aus.

Gruß
Christian
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 18:58:10
daniel
Hi

das problem mit den drei gleichen Zahlen kommt daher, dass ein eindimensionales Array, welches in eine zweidimensionale Tabelle geschrieben wird, in der zweidimensionalen Welt eine Zeile ist und keine Spalte, dh die Werte werden nebeneinander geschrieben und stünden eigentlich in A1, B1 und C1
B1 und C1 hast du nicht angegeben, also fallen der zweite und dritte Wert weg, und für die Zellen A1:A3 wird der erste Wert dann wiederholt eingetragen.

wenn man die Werte eines eindimensionales Array in eine Spalte (also untereinander) schrieben will, muss man es transponieren:

With Worksheetfunction

Range("A1:A3").Value = .Transpose(Array(.RandBetween(0, 255), .RandBetween(0, 255), .RandBetween(0, 255)))
End with


Gruß Daniel
Anzeige
Jetzt klappts, danke für die Erklärung owT
29.11.2024 19:11:47
Christian
AW: VBA - Zahlen nicht so zufällig wie gewollt
29.11.2024 19:28:16
Yal
In der Tat. Da habe ich schneller getippt als getestet. Danke Daniel.

VG
Yal


Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18