Die Basis dazu sieht in etwa so aus:
Option Explicit
Public Type TimeSpan
MinValue As Date
MaxValue As Date
End Type
Public Sub GenerateRandomDateInRange()
Dim ts As TimeSpan
ts.MinValue = DateSerial(2022, 7, 13) + TimeSerial(6, 0, 0)
ts.MaxValue = DateSerial(2022, 7, 13) + TimeSerial(14, 0, 0)
Dim dtmRandom As Date
dtmRandom = DateAdd( _
Date:=ts.MinValue, _
Interval:="s", _
Number:=WorksheetFunction.RandBetween(0, DateDiff("s", ts.MinValue, ts.MaxValue)))
Debug.Print "#" & ts.MinValue & "# to #" & ts.MaxValue & "#"; Tab(5); ">> #" & dtmRandom & "#"
End Sub
Das erzeugt dir ein zufälliges Datum in einem Bereich (diesen Code-Schnipsel würde ich als Funktion verpacken, in welche an Min und Max hinein gibt und dtmRandom die Funktionsrückgabe ist).
Dann fehlt nur noch die Logik mit den einzuhaltenden Abständen und das ausschließen von zu betrachtenden Zeiträumen. Diese Informationen muss man sich merken (z.B. in einer Collection). Deinem Beispiel "6:00 - 14:00 Uhr [...] Allerdings nicht zischen 10:00 und 10:30 Uhr." folgend, währe es zunächst erforderlich einen Splitter zu schreiben, der aus jenen Angaben eine Liste mit erlauben Zeitabschnitten (TimeSpan) erstellt. Also -> 6:00 bis 9:59 und 10:31 bis 14:00. In deinem Beispiel betrachtest du übrigends die Minuten als kleinste Einheit. Das Makro oben bricht es allerdings auf Sekunden herunter (also eine Definitionsfrage Deiner-Einer ).
Das diese Logik jemand für dich umsetzt, davon solltest du besser nicht ausgehen. Das ist sogar eine sehr gute Übung für Anfänger.
Grüße
|