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

Randomize, RND, Timer() , (@Onur, Opawinni)

Forumthread: Randomize, RND, Timer() , (@Onur, Opawinni)

Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 17:16:08
peter
Hallo Onur, Opawinni

Mich hat diese ganze Thematik keine Ruhe gelassen und daher habe ich noch einige Versuche unternommen.
Der wiederholte Aufruf von Randomize innerhalb einer Schleife ist nur dann problematisch , wenn die Abarbeitung sehr schnell geht. Auf meinem Rechner hat die Timer() Funktion eine Auflösung von 3,9 Millisekunden (auch wenn sie als Single defniert ist).



Sub TestTimer()
Dim c As Long
Dim t As Single
c = 0
t = Timer()
Do
c = c + 1
Loop Until (Timer() - t) > 0
Debug.Print c, (Timer() - t)
End Sub


Liefert als Ergebnis: 21504 3,90625E-03
Wobei die Anzahl der Durchläufe stark variert.

Der wiederholte Aufruf von Randomize mit einem fixen Startwert liefert immer genau 256 unterschiedliche Werte für die RND Funktion. Dannach beginnt das Spiel von vorne.



Sub testRandomize()
Dim i As Long
Dim z() As Long
ReDim z(9999, 1)
For i = 0 To 9999
Randomize 1
z(i, 0) = Int(Rnd * 1000)
Next
Range("A1").Resize(10000, 1) = z
End Sub


Hier scheint intern ein Zähler mitzulaufen.
Wenn nun wie Opawinni's Beispiel die RND Funktion öfters als 256 mal innerhalb von 3.9 Millisekunden aufgerufen wird, kommt es zu diesen Wiederholungen.

Das Thema ist zwar rein akademisch, eure Meinung dazu würde mich trotzdem interessieren.

Peter



Anzeige

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 17:29:55
Daniel
Hi
RND liest Zahle aus einer fest einprogrammiert en Tabelle, diese hat eine Bestimmte Anzahl von Einträgen

Dann gibt es noch einen Zähler, der sagt welcher Wert aus der Liste gelesen werden soll.
Mit jedem RND wird der Zähler eins hochgesetzt und du bekommst den nächsten Wert aus der Liste. Ist die Liste durch, wird wieder von vorne angefangen.

Wenn Excel neu gestartet wird, ist der Zähler immer auf Anfang der Liste.

Mit Randomize kannst du den Zähler auf einen bestimmten Wert setzten.
Verwendest du immer den selben Wert, bekommst du auch immer die selben Zahlen.

Daher reicht Randomize auch einmal zu Beginn.
Und man sollte hier keinen festen Wert eingeben, sondern nichts oder einen veränderlichen Wert (beispielsweise die Uhrzeit) damit man immer andere Werte bekommt

Gruß Daniel
Anzeige
Viele Dank
10.05.2024 12:07:05
peter
Hallo

Vielen Dank an Alle die auf meinen Beitrag geantwortet haben. Die Frage nach der Auflösung der Timer() Funktion wurde leider nicht beantwortet (ist aber auch nicht wichtig).

Peter
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 18:15:36
Oppawinni
Jain, es ist mehr ein bestimmter Algorithmus, der hinter diesen Pseudo-Zufallszahlen steht. Egal.
Dieser Algorithmus liefert aber für einen bestimmten Startwert immer die gleiche Folge von Zufallszahlen.
Ich denke nicht - das hatte ich in dem Vorgänger-Thread schon geschrieben - dass der Algorithmus bei
RandBetween ein anderer ist, als bei Rnd, die Frage ist nur, wie z.B. Randbetween das mit dem Startwert regelt.
Nach allem was ich gefunden habe, dürfte es sich bei dem in Excel verwendeten Algo seit Excel 2010 um
https://de.wikipedia.org/wiki/Mersenne-Twister
handeln und der wäre doch ziemlich hochwertig.
Bei Rnd kannst du den Startwert mit Randomize beeinflussen.
Die Frage wäre aber, wie man Randomize sinnvoll einsetzt, damit da nicht plötzlich Systematik, statt "Zufall" heraus kommt.
Ich denke jedenfalls aktuell, dass man mit Randomize sparsam umgehen sollte.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 18:19:44
peter
Hallo Opawinni

Bin ganz Deiner Meinung bzgl. Randomize, mich hat die Sache einfach nur interessiert, wie der Zusammenhang von Randomize und Timer() entsteht.

Peter
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 18:32:23
Daniel
Zitat aus der Doku:.

Wenn Sie number weglassen, wird der Wert, den der Systemtimer zurückgibt, als neuer seed-Wert verwendet.

Dh, "Randomize" und "Randomize Timer" ist das gleiche.
Es wird die Uhrzeit als Seed verwendet, da es unwahrscheinlich ist, dass dieser Befehl 2x zur exakt gleichen Uhrzeit ausgeführt wird.

Wenn du prüfen willst, ob sich Zufallszahlen wiederholen, solltest du sie nicht runden

Gruß Daniel
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 19:13:17
Der Steuerfuzzi
Hallo,

Ich meine schon, dass RANDBETWEEN einen anderen Algorithmus verwendet, da ich vor einigen Jahren schon Probleme mit RND hatte, die ich mit RANDBETWEEN gelöst hatte.

Damals hatte ich mir GUIDs mittels Rnd/Randomize Timer erstellt und hatte bei ca. 20.000 Werten mehrere Dubletten. Das ganze hatte ich dann auf RANDBETWEEN umgeschrieben und konnte dadurch das Problem lösen. Die Probleme mit Rnd waren vor einigen Jahren ständig in den Foren zu lesen.

Mittlerweile tritt das Problem mit Rnd aber nicht mehr auf, ich kann aber nicht genau sagen mit welcher Version oder welchem update das beseitigt wurde.

Ich bin auch der Meinung, dass man mit Randomize sparsam umgehen sollte. Es macht mE keinen Sinn, den Startwert bei jeder Zufallszahlermittlung neu zu setzen. Einmal reicht vollkommen, natürlich je nach Anwendung.

Ich habe das irgendwann mal mit Excel 2019 getestet und mittlerweile gibt Rnd selbst ohne Randomize nicht mehr die gleiche Sequenz aus. Anscheinend hat auch hier MS etwas nachgebessert.

Grüße
Michael
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 20:41:36
Oppawinni
Das Problem dürfte gewesen sein, dass jedes Randomize quasi die zufällige Folge stört, bzw. eine neue Zufallsreihe startet.
Wie gesagt, der Algo kann schon der gleiche sein, aber Randbetween lässt halt nicht durch ein Randomize stören.
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:13:37
Onur
Da vertust du dich wohl.
VBA RND benutzt offenbar NICHT den Mersenne Twister-Algorithmus, denn wenn ich den gleichen Test mit der Excel-Funktion RAND mache, wiederholen sich die Werte nicht nach 160.000 Durchläufen, wie bei RND().
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
13.05.2024 10:57:05
Der Steuerfuzzi
Hallo,

ich habe mal meine Versuche zur GUID herausgesucht und etwas getestet. Und was soll ich sagen, das Problem mit RND ist auch in der Version 2019 nicht behoben.

Ich habe 50000 GUIDs erstellt mit RND (einmal mit Randomize Timer bei jeder GUID und einmal bei jedem Byte) und es kommen mehrere Dubletten vor, egal wie oft Randomize ausgeführt wird.

Ich habe die Funktion ZUFALLSZAHL (RAND) verwendet und das Problem tritt nicht auf. Also ist die Arbeitsblattfunktion nicht identisch mit der VBA-Funktion. Mit RANDBETWEEN läuft das ganze dann auch noch ohne Dubletten und viel schneller.

Ihr könnt ja mal selber testen. Einfach mal alle Varianten laufen lassen und nach der GUID sortieren ... Hier mein Code:
Sub TestGUID()

Dim a(1 To 50000, 1 To 1) As String
Dim i As Long
For i = 1 To 50000
a(i, 1) = MyGUID_rand()
Next
Range("A2:A50001").Value = a
End Sub

Function MyGUID_rnd_einmal() As String

j As Long
Dim text As String
Dim z As Byte
Randomize Timer
For j = 1 To 16
z = Int(255 * Rnd + 1)
Select Case j
Case 7
z = (z And 15) Or 64
Case 9
z = (z And 63) Or 128
End Select
text = text & WorksheetFunction.Dec2Hex(z, 2)
Next
MyGUID_rnd_einmal = Left(text, 8) & "-" & Mid(text, 9, 4) & "-" & Mid(text, 13, 4) & "-" & Mid(text, 17, 4) & "-" & Right(text, 12)
End Function

Function MyGUID_rnd_jedesmal() As String

Dim j As Long
Dim text As String
Dim z As Byte
For j = 1 To 16
Randomize Timer
z = Int(255 * Rnd + 1)
Select Case j
Case 7
z = (z And 15) Or 64
Case 9
z = (z And 63) Or 128
End Select
text = text & WorksheetFunction.Dec2Hex(z, 2)
Next
MyGUID_rnd_jedesmal = Left(text, 8) & "-" & Mid(text, 9, 4) & "-" & Mid(text, 13, 4) & "-" & Mid(text, 17, 4) & "-" & Right(text, 12)
End Function

Function MyGUID_rand() As String

Dim j As Long
Dim text As String
Dim z As Byte
For j = 1 To 16
z = Int(255 * Evaluate("Rand()") + 1)
Select Case j
Case 7
z = (z And 15) Or 64
Case 9
z = (z And 63) Or 128
End Select
text = text & WorksheetFunction.Dec2Hex(z, 2)
Next
MyGUID_rand = Left(text, 8) & "-" & Mid(text, 9, 4) & "-" & Mid(text, 13, 4) & "-" & Mid(text, 17, 4) & "-" & Right(text, 12)
End Function

Function MyGUID_randbetween() As String

Dim j As Long
Dim text As String
Dim z As Byte
For j = 1 To 16
z = WorksheetFunction.RandBetween(0, 255)
Select Case j
Case 7
z = (z And 15) Or 64
Case 9
z = (z And 63) Or 128
End Select
text = text & WorksheetFunction.Dec2Hex(z, 2)
Next
MyGUID_randbetween = Left(text, 8) & "-" & Mid(text, 9, 4) & "-" & Mid(text, 13, 4) & "-" & Mid(text, 17, 4) & "-" & Right(text, 12)
End Function
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
13.05.2024 12:12:06
Oppawinni
Wenn ich das richtig sehe, rufst du randomize in den functions auf. Lass das mal ganz da raus. Rufe in der Main genau einmal randomize auf...
Jedes weitere randomize schadet nur.
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
13.05.2024 12:44:42
Der Steuerfuzzi
Klar, das macht natürlich sinn, da Randomize zu oft in kurzer Zeit aufgerufen wird und damit der gleiche Seed verwendet wird. Bei jedem weitern Aufruf wird ja dann der letzte Zufallswert mit einbezogen.

Timer ändert sich tatsächlich ca. alle 0,00390625 Sekunden. Innerhalb dieser Zeit würde ein Aufruf von Randomize zu den gleichen Sequenzen führen und damit zu den Dubletten.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
13.05.2024 13:33:30
Oppawinni
Es gibt Hinweise darauf, dass Microsoft nicht den originalen Wichmann-Hill eingebaut hat. Z.B. ....
https://www.sciencedirect.com/science/article/abs/pii/S016794730800162X
Insofern bleibt unklar was genau hinter RND steckt.
Wie auch immer. RND liefert Pseudo-Zufallszahlen nach irgend einem Algorithmus (der irgend eine Variante von Wichmann-Hill sein soll), kann aber, was ja für manche Fälle durchaus interessant sein kann, per Randomize auf einen bestimmten Seed gesetzt werden, was du halt bei RAND oder RANDBETWEEN nicht kannst. Da wird vermutlich beim Start von Excel, oder beim ersten Aufruf, also genau ein mal initialisiert und danach kommen halt die Zahlen, wie sie der Algorithmus (hier vllt. Mersenne-Twister ?) vorgibt.
Wenn du Wiederholungen vermeiden willst, denke ich, ist bei Verwendung von RND jeder Aufruf von Randomize kontraproduktiv, weil du den Algo wieder an einen neuen Seed setzt, der womöglich der Gleiche ist, wie schon gehabt und damit wiederholt sich einfach wieder die Folge, die du schon hattest.
Wenn man Mersenne-Twister auch immer auf den gleichen Seed zurücksetzen könnte, würden sich da natürlich auch die Zahlen wiederholen und du würdest dich über Duplikate freuen können, logisch.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
14.05.2024 00:01:57
Oppawinni
Ich hatte das schon verlinkt...aber ich wollte es nicht glauben.
https://en.wikibooks.org/wiki/Visual_Basic_for_Applications/A_PRNG_for_VBA
Was da unter "Microsoft's Rnd() algorithm" steht, also dieses primitive Ding, da....
das ist absolut genau das was verwendet wird. natürlich mit Randomize und schnick schnack aussen herum, aber...
da kannst du, wenn du eine Zufallszahl hast direkt die nächste vorher sagen... Hellau...
Wichmann-Hill war halt scheinbar zu kompliziert.

Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
14.05.2024 09:25:33
Oppawinni
ähm, wie Sie sehen, sehen sie nichts... irgendwie hast du da ne externe Datei drin,
aber vielleicht tut es ja etwas ganz einfaches:
https://www.herber.de/bbs/user/169436.xlsx
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
14.05.2024 13:36:01
Onur
Einfach Meldung ignorieren und Button klicken (und paar Sekunden warten)
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
13.05.2024 14:33:54
Oppawinni
Es ist auch fraglich, wie Randomize mit dem Timer umgeht. (Bei mir macht der Timer im Übrigen nur Schritte von so etwa 0,015 s)
Ich hab bei meinem Wichmann-Hill 2006 ( RndWH2() ) z.B. aber auch nur die Vorkommastellen ausgewertet.
Das wird aber auch normalerweise nicht mehrfach initialisiert.
Je nach Quelle findet man auch die verschiedensten Methoden die Initialisierung über einen Timer vorzunehmen.
Microsoft hat da offensichtlich auch noch eine Art Zähler eingebaut, der zusätzlichen Einfluss auf die Initialisierung hat,
so dass du z.B. NICHT nach jedem Randomize 1 die gleichen Zufallszahlen bekommst, sondern erst nach dem 256-ten Aufruf von Randomize 1.
So richtig transparent ist das alles für mich nicht, was Microsoft bei Randomize genau macht, aber das Vermeiden von Randomize ist sicher vorteilhaft,
wenn man keine Wiederholungen haben will.
Ich hab deinen Code mal geändert:
- Randomize nur einmal in der aufrufenden Prozedur und Zufallszahlen per RND : ->keine Duplikate
- Verwendung von RndWH2() statt RND: -> keine Duplikate
Und Rnd ist auf jeden Fall bedeutend schneller als Randbetween.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:19:49
Oppawinni
Ist dem so ? Hast du das selbst ermittelt ?
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:22:28
Onur
Jo, ich habe statt RND einfach Evaluate("RAND()") genommen, da es keine "WorkSheetFunction.Rand()" gibt.
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:26:45
Oppawinni
schön, aber wie hast du das im Detail getestet ?
Code wäre gut.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:31:49
Onur
Der selbe Code, den wir schon benutzt haben (2 Diagramme nebeneinander), nur statt RANDBETWEEN:
Int(Evaluate("RAND()") * 101)
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:53:20
Oppawinni
? aber da hast du doch nur eine Wiederholung festgestellt, weil du da Randomize 1 rein geschrieben hattest und
das hat sich nach 8 Aufrufen wiederholt... du solltest halt mal KEIN Randomize innerhalb dieses Programmes verwenden.
Rufe es von mir aus vorher einmal auf.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 22:57:53
Onur
OOOPS! Hast Recht, bin schon ganz durcheinander. Randomize oder Randomize Timer bringt keine Wiederholungen.
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
09.05.2024 00:21:25
Oppawinni
Von Microsoft hab ich immer noch nichts dazu gefunden, aber hier:
https://en.wikibooks.org/wiki/Visual_Basic_for_Applications/A_PRNG_for_VBA#:~:text=The%20Rnd()%20function%20of,a%20cycle%20length%20of%2016%2C777%2C216.
heißt es wohl, dass hinter rnd() von VBA noch der einfache Wichmann-Hill steckt (im Wesentlichen ist der Artikel wohl aus 2016) und das wären dann doch nur 2^24 .. bis sich das wiederholt...
aber immerhin wird auch gesagt:
In jedem Fall sollte Randomize() nur einmal aufgerufen werden, vor und außerhalb einer Generatorschleife, die Rnd() enthält.
Da frag ich mich dann halt, warum Microsoft keine Worksheetfunction.Rand verfügbar macht. Mit Evaluate("Rand()") willst du das nicht machen, das ist arschlahm.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
09.05.2024 10:40:37
Oppawinni
Noch ein Nachtrag...
Die Implementation von Wichmann-Hill musste Microsoft, soweit ich mich erinnere, am Anfang einige male korrigieren.
Es ist bekannt, dass Wichmann-Hill so einige statistische Tests nicht besteht, z.B. hinsichtlich Gleichverteilung und sowas.
D.h. es gibt wohl aktualisierte Varianten von Wichmann-Hill, die da besser sind und auch umfangreicher, aber ich nehme nicht an,
dass Microsoft daran etwas geändert hat. Wenn, dann wäre man wohl auch da auf Mersenne-Twister umgestiegen.

Für statistische Zwecke - z.B. Monte-Carlo - wären dann vielleicht doch eher die Worksheetfunctions zu bevorzugen, als da z.B. wären
RandBetween (ganzzahlig) oder RANDARRAY (variabel). RandArray hab ich halt nicht (Excel 2016) insofern kann ich dazu
auch nichts sagen. Prinzipiell müsste man damit auch einzelne Zufallszahlen ermitteln können, wobei ich da auch wieder
nur vermuten kann, dass dort Mersenne-Twister Anwendung findet. Schade, dass Microsoft da mit den Infos so sparsam ist.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
11.05.2024 00:13:11
Oppawinni
Ich hab mal spaßeshalber versucht den Wichmann-Hill 2006 zu programmieren, ist ja nicht viel,
Nur wie das mit der Initialisierung genau laufen soll, naja, jedenfalls soll der ne Periode von 2^121 haben,
einige statistische Test bestanden haben und.... schneller als Randbetween wär das immer noch:


Option Explicit

Dim glngWHSeed(3) As Long
Dim gblnWHinit As Boolean


Public Function RndWH2() As Double

Dim R As Double

If Not gblnWHinit Then
Dim Seed As Long
Seed = Int(Timer) + 1
glngWHSeed(0) = 11600 * (Seed Mod 185127) - 10379 * (Seed / 185127)
If (glngWHSeed(0) 0) Then glngWHSeed(0) = glngWHSeed(0) + 2147483579
glngWHSeed(1) = 47003 * (Seed Mod 45688) - 10479 * (Seed / 45688)
If (glngWHSeed(1) 0) Then glngWHSeed(1) = glngWHSeed(1) + 2147483543
glngWHSeed(2) = 23000 * (Seed Mod 93368) - 19423 * (Seed / 93368)
If (glngWHSeed(2) 0) Then glngWHSeed(2) = glngWHSeed(2) + 2147483423
glngWHSeed(3) = 33000 * (Seed Mod 65075) - 8123 * (Seed / 65075)
If (glngWHSeed(3) 0) Then glngWHSeed(3) = glngWHSeed(3) + 2147483123
gblnWHinit = True
End If

glngWHSeed(0) = 11600 * (glngWHSeed(0) Mod 185127) - 10379 * (glngWHSeed(0) / 185127)
If (glngWHSeed(0) 0) Then glngWHSeed(0) = glngWHSeed(0) + 2147483579
glngWHSeed(1) = 47003 * (glngWHSeed(1) Mod 45688) - 10479 * (glngWHSeed(1) / 45688)
If (glngWHSeed(1) 0) Then glngWHSeed(1) = glngWHSeed(1) + 2147483543
glngWHSeed(2) = 23000 * (glngWHSeed(2) Mod 93368) - 19423 * (glngWHSeed(2) / 93368)
If (glngWHSeed(2) 0) Then glngWHSeed(2) = glngWHSeed(2) + 2147483423
glngWHSeed(3) = 33000 * (glngWHSeed(3) Mod 65075) - 8123 * (glngWHSeed(3) / 65075)
If (glngWHSeed(3) 0) Then glngWHSeed(3) = glngWHSeed(3) + 2147483123

R = (glngWHSeed(0) * 1#) / 2147483579# + (glngWHSeed(1) * 1#) / 2147483543# + _
(glngWHSeed(2) * 1#) / 2147483423# + (glngWHSeed(3) * 1#) / 2147483123#

RndWH2 = R - Int(R)

End Function
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 18:40:57
peter
Hallo Daniel

Daher auch Timer() in der Bedreff Zeile. Auf meinem Rechner habe ich eine Auflösung von 0,0039 d.h ich kann in einer Schleife Randomize (ohne Parameter bis zu 20.000 mal aufrufen. Wo ist hier die Unwahrscheinlichkeit?.

Peter
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 19:58:34
Daniel
Die Zufallszahl ergibt sich aus dem Seedwert und dem internen Zähler
den Seedwert setzt du mit Randomize.
der interne Zähler wird nach jedem RND um 1 hochgezählt.
Randomize beeinflusst nicht den Zähler.
den internen Zähler kannst du nur dadurch zurücksetzen, dass du die Exceldatei schließt und wieder öffnest.
das heißt, es ist völlig egal, ob du das Randomize x in einer Schleife durchführst oder nur einmal zu beginn.

dh nach jedem Öffnen der Datei bekommst du bei gleichem Seedwert auch immer die gleichen Zufallszahlen.

so zumindest in Excel 2010 (was anderes hab ich grad nicht zur verfügung)

hier zum Testen
Sub test()

Dim s As Long
Dim i
s = Cells(1, Columns.Count).End(xlToLeft).Column + 1
Randomize 1
For i = 1 To 10

Cells(i, s) = Rnd
Next

End Sub

nach jedem Lauf Datei speichern und schließen.
wenn ich das mehrfach mache, stehen da in jeder Zeile die selben Zahlen.
dabei spielt es keine Rolle, ob das Randomize x vor oder in der Schleife steht.

Gruß Daniel

Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 20:47:41
Onur
Was du nicht kapierst, ist, dass man einfach Randomize NICHT innerhalb der Schleife benutzen darf, sondern nur am Anfang VOR der Schleife, und zwar am Besten OHNE Parameter (also mit Timer).
Randomize innerhalb der Schleife mit festem Parameter wie in deinem Beispiel generiert natürlich immer gleiche Zahlenfolgen und das hat nix mit deinen 0,0039 sec zu tun, da bei festem Parameter NICHT der Timer als Seed genommen wird sonder die 1 (in deinem Beispiel).
Aber selbst wenn da "Randomize Timer" oder nur "Randomize" steht, wiederholt sich alles alle X mal, da innerhalb der Schleife der Zufallszahlengenerator immer wieder neu initialisiert wird.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 20:07:28
peter
Hallo Daniel

Ist mir alles bewußt bzw. hab ich durch meine Tests rausgefunden (ich hab ja bereits in meinem Beitrag geschrieben , daß es sich hier um ein akademisches Problem handelt). In 365 ist der interne Zähler auf 256 beschränkt, ist das auch 2010 so?. Wie sieht die Auflösung der Timer Funktion in 2010 aus? Ebenfalls 0,0039?

Peter
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 20:38:34
Daniel
HI
Excel 2010 hat über 16 Millionen Zufallszahlen (2^24)
davon ist keine doppelt

wenn du mehr als 2^24 Zufallszahlen abfragest, wiederholt sich die Reihenfolge.

Gruß Daniel
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 20:31:50
Oppawinni
Warum gibst du auch randomize einen Parameter mit, dann muss du dich doch nicht wundern, wenn du immer wieder die gleichen Zahlen bekommst.
Anzeige
AW: Randomize, RND, Timer() , (@Onur, Opawinni)
08.05.2024 18:16:33
peter
Hallo Daniel

Danke für deine Antwort. Ich hab nicht vor Randomize in einer Schleife zu verwenden, es geht ums Prinzip. Mit dem wiederholten Aufuf von Randomize kann man den Zähler NICHT auf einen bestimmten Wert setzen. In meinem Beispiel werden zwar nur 256 zufällige Werte ausgewählt (die immer die selben sind, die Reihenfolge ist aber willkürlich, sprich bei wiederholtem Aufruf des Makro ändert sich der Startpunkt).
Wie bereits gesagt, ein akademisches Problem.

Peter
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige