Eine ganzzahlige Zufallszahl innerhalb eines gegebenen
Zahlenbereichs liefert Ihnen die Funktion RndNum. Da der interne
Zufallszahlengenerator von Visual Basic (Funktion Rnd)
beim Start einer Anwendung immer wieder vom gleichen Ursprung
ausgeht, erhalten Sie jedoch immer die gleichen, nur zufällig
scheinenden Zahlen in immer der gleichen Reihenfolge. Mit der
Anweisung Randomize
können Sie den Zufallszahlengenerator so initialisieren, dass er
weitaus zufälligere Zahlen liefert, indem Sie als
Initialisierungswert den Wert der Timer-Funktion
übergeben. Diese gibt die Anzahl der seit Mitternacht vergangenen
Sekunden zurück. Übergeben Sie der Funktion RndNum im optionalen
Parameter DoRandomize den Wert True, wird der Zufallszahlengenerator
auf diese Weise vor jeder "Ziehung" einer Zufallszahl
erneut initialisiert.
Public Function RndNum(ByVal LBnd As Long, ByVal UBnd As Long, _
Optional ByVal DoRandomize As Boolean) As Long
If DoRandomize Then
Randomize Timer
End If
RndNum = Int((UBnd - LBnd + 1) * Rnd + LBnd)
End Function
Falls Sie gleich mehrere Zufallszahlen aus einem Zahlenbereich
benötigen, können Sie die Funktion RndSet verwenden. Sie geben die
gewünschte Anzahl an und bekommen die Zahlen wahlweise in einer Collection
(Voreinstellung) oder als Array geliefert.
Public Function RndSet(ByVal Count As Long, ByVal LBnd As Long, _
ByVal UBnd As Long, Optional ByVal DoRandomize As Boolean = True, _
Optional ByVal AsArray As Boolean) As Variant
Dim nNumbers As Collection
Dim nRnd As Long
Dim nRndTest As Long
Dim nRndSetArray() As Long
Dim l As Long
If DoRandomize Then
Randomize Timer
End If
Set nNumbers = New Collection
With nNumbers
On Error Resume Next
Do
nRnd = RndNum(LBnd, UBnd)
nRndTest = nNumbers(CStr(nRnd))
If Err.Number Then
Err.Clear
.Add nRnd, CStr(nRnd)
End If
Loop Until .Count = Count
End With
If AsArray Then
ReDim nRndSetArray(1 To Count)
For l = 1 To Count
nRndSetArray(l) = nNumbers(l)
Next
RndSet = nRndSetArray
Else
Set RndSet = nNumbers
End If
End Function
Zahlengruppen nach dem Muster 6 aus 49 für Ihren Lottoschein
ermitteln Sie beispielsweise folgendermaßen:
Dim nLotto As Collection
Dim i As Integer
Set nLotto = RndSet(6, 1, 49)
For i = 1 To 6
Debug.Print nLotto(i)
Next 'i

|