Die Funktion ›Rnd‹ in VBA
Einfache Verwendung
Der Aufruf »Rnd()« liefert eine Zufallszahl zwischen «0!» (einschließlich) und «1!» (ausschließlich) vom Typ ›Single‹.
Der Ausdruck »rnd()+rnd()/2^23« sollte daher eine Zufallszahl zwischen «0#» (einschließlich) und «1#» (ausschließlich) vom Typ ›Double‹ ergeben.
Man kann sich vorstellen, daß die VBA-Implementation eine Liste von insgesamt 16777216 (2^27) verschiedenen Zufallszahlen hat und jeder Aufruf »Rnd()« eine Zufallszahl aus jener Liste ergibt und den Zufallszahlengenerator dann zur nächsten Zahl in der Liste voranstellt (falls der Zufallszahlengenerator sich schon bei der letzten Zahl der Liste befand wird er wieder auf die erste Zahl gestellt).
Verwendung mit positivem Argument
Ein Aufruf wie »Rnd( 2 )« mit einem positiven Argument hat dasselbe Verhalten wie der Aufruf »Rnd()« ohne Argument.
- Das Verhalten eines Aufrufs besteht aus dessen Wert und dessen Wirkung.
Verwendung mit dem Argumentwert «0»
Ein Aufruf wie »Rnd( 0 )« mit dem Argumentwert «0» hat denselben Wert, wie ihn der direkt vorangehende Aufruf von »Rnd()« hatte.
(Hierzu nehmen wir an, daß nach dem Start der VBA-Implementation vor der Ausführung der ersten Anweisung einmal intern »Rnd()« aufgerufen wurde. Wenn »Rnd( 0 )« also direkt nach dem Start der VBA-Implementation ausgewertet wird, ergibt sich der Wert jenes internen Aufrufes.)
Verwendung mit einem negativen Argumentwert
Ein Aufruf wie »Rnd( -1 )« mit einem negativen Argumentwert positioniert den Zufallszahlengenerator an einer durch den Argumentwert bestimmten Stelle der Liste der insgesamt 16777216 (2^27) verschiedenen Zufallszahlen. Auf diese Weise läßt sich eine ganz bestimmte Folge von Zufallszahlen abrufen.
(Beim Start der VBA-Implementation wird praktisch einmal »Rnd(-16184694)« ausgewertet.)
»RANDOMIZE« ohne Argument
Der Aufruf von »RANDOMIZE« ohne Argument positioniert den Zufallszahlengenerator an einer zufälligen (eigentlich: durch die aktuelle Uhrzeit bestimmten) Stelle in der Liste der möglichen Zufallszahlen.
»RANDOMIZE« kann am Anfang eines Programms einmal aufgerufen werden, um nicht immer wieder die gleiche Liste von Zufallszahlen zu erhalten. Dabei sollte diese Funktion aber nur einmal am Anfang eines Programmes aufgerufen werden und nicht etwa vor jedem Aufruf von ›Rnd‹!
»RANDOMIZE« wählt eine von nur 65536 verschiedenen Positionen in der Liste der Zufallszahlen aus. Um noch mehr Variationen zu erhalten, könnte man nun noch einige Aufrufe von ›Rnd‹ folgen lassen, deren Anzahl durch die Uhrzeit oder etwas Ähnliches bestimmt ist.
›RANDOMIZE‹ mit Argument
Der Aufruf von ›RANDOMIZE‹ mit einem numerischen Argument positioniert den Zufallszahlengenerator an einer Stelle in der Liste der möglichen Zufallszahlen, die von dem Argumentwert und der derzeitigen Stelle in der Liste abhängt.
Ein Aufruf von ›RANDOMIZE‹ mit einem bestimmten Zahlenwert kann also im allgemeinen nicht verwendet werden, um den Zufallszahlengenerator wieder auf dieselbe Stelle einzustellen wie bei einem vorherigen Aufruf von ›RANDOMIZE‹ mit demselben Zahlenwert. Hierfür sollte vielmehr ein Aufruf von ›RND‹ mit einem negativen Zahlenwert verwendet werden. Der Aufruf von ›RANDOMIZE‹ mit einem bestimmten Zahlenwert sollte nur in ganz wenigen Fällen angebracht sein, normalerweise sollte man ihn nicht verwenden.