3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo liebe Allwissenden!

Ich möchte für eine Multimomentaufnahme zufällige Zeitpunkte für Rundgänge ermitteln. Der letzte Rundgang muss aber um spätestens um 16:30 Uhr stattfinden.
Das bedeutet ich muss so lange den Zufallszeitpunkt ermitteln bis dieser <=16:30 Uhr ist.

Ich habe im Moment diesen Code:

Private Sub Zufallsgenerator()
Dim Bereich As Range
Dim zelle As Range

Set Bereich = Range("A3")

For Each zelle In Bereich
zelle.Value = Int((9 - 6 + 1) * Rnd + 6)

Next zelle

Dim Bereich2 As Range
Dim zelle2 As Range

Set Bereich2 = Range("B3")

For Each zelle2 In Bereich2
zelle2.Value = Int((60 * Rnd) + 1)


Next zelle2

end sub

Zunächst wird die Stunde und dann die Minute zufällig ermittelt, in einer Zellfunktion setzte ich das zu einer Uhrzeit per Verkettenfunktion zusammen -ich weiß das das bestimmt auch eleganter geht. In einer anderen Zelle habe ich eine Wennfunktion die entwerder "ok" oder "wiederholen" ausgibt. Ich möchte aber das so lange Zufallszeitpunkte ermittelt werden bis "ok" da steht. Wenn das klappt wäre ich total glücklich. ;)

Noch toller wärs wenn ich die Zufallszeitpunkte für mehrer Tage festlegen könnte mit einem klick. Praktisch, wenn der erste Zufallszeitpunk "ok" ist dann in die darunter liegende Zeile gleich den nächsten zeitpunkt ermittelt und so weiter (für 20 Tage)

Ich kann leider meine Excel nicht hochladen, weil ich auf der Arbeit bin, vielleicht hat ja trotzdem jemand eine Lösung (ich denke eine Schleife wäre das richtige, nur weiß ich nicht wie man das programmiert)

Danke schonmal

Inka

3 Antworten

0 Punkte
Beantwortet von
einfachere Lösung:

Anzahl der Minuten vom frühesten bis zum letzten Rundgang

Darüber Zufallszahl laufen lassen

aus ermitteltem Wert die Uhrzeit berechnen

Vorteile: nur eine Zufallszahl, ermittelter Wert liegt immer im zulässigen Zeitraum
0 Punkte
Beantwortet von
Hallo

Das hatte ich zunächst auch überlegt.
Ich kopier doch lieber mal den ganzen Code.

Private Sub Zufallsgenerator()
Dim Bereich As Range
Dim zelle As Range

Set Bereich = Range("A3")

For Each zelle In Bereich
zelle.Value = Int((9 - 6 + 1) * Rnd + 6)

Next zelle

Dim Bereich2 As Range
Dim zelle2 As Range

Set Bereich2 = Range("B3")

For Each zelle2 In Bereich2
zelle2.Value = Int((60 * Rnd) + 1)


Next zelle2

Dim Abstand1 As Range
Dim Abstandzelle1 As Range

Set Abstand1 = Range("G3:G3")

For Each Abstandzelle1 In Abstand1
Abstandzelle1.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle1

Dim Abstand2 As Range
Dim Abstandzelle2 As Range

Set Abstand2 = Range("J3:J3")

For Each Abstandzelle2 In Abstand2
Abstandzelle2.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle2


Dim Abstand3 As Range
Dim Abstandzelle3 As Range

Set Abstand3 = Range("M3:M3")

For Each Abstandzelle3 In Abstand3
Abstandzelle3.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle3

Dim Abstand4 As Range
Dim Abstandzelle4 As Range

Set Abstand4 = Range("P3:P3")

For Each Abstandzelle4 In Abstand4
Abstandzelle4.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle4

Dim Abstand5 As Range
Dim Abstandzelle5 As Range

Set Abstand5 = Range("S3:S3")

For Each Abstandzelle5 In Abstand5
Abstandzelle5.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle5

Dim Abstand6 As Range
Dim Abstandzelle6 As Range

Set Abstand6 = Range("V3:V3")

For Each Abstandzelle6 In Abstand6
Abstandzelle6.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle6

Dim Abstand7 As Range
Dim Abstandzelle7 As Range

Set Abstand7 = Range("Y3:Y3")

For Each Abstandzelle7 In Abstand7
Abstandzelle7.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle7

Dim Abstand8 As Range
Dim Abstandzelle8 As Range

Set Abstand8 = Range("AB3:AB3")

For Each Abstandzelle8 In Abstand8
Abstandzelle8.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle8

Dim Abstand9 As Range
Dim Abstandzelle9 As Range

Set Abstand9 = Range("AE3:AE3")

For Each Abstandzelle9 In Abstand9
Abstandzelle9.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle9

Dim Abstand10 As Range
Dim Abstandzelle10 As Range

Set Abstand10 = Range("AH3:AH3")

For Each Abstandzelle10 In Abstand10
Abstandzelle10.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle10

Dim Abstand11 As Range
Dim Abstandzelle11 As Range

Set Abstand11 = Range("AK3:AK3")

For Each Abstandzelle11 In Abstand11
Abstandzelle11.Value = Int((60 - 30 + 1) * Rnd + 30)


Next Abstandzelle11



End Sub




Ich muss nämlich einen Mindestabstand zwischen den Rundgängen haben der zwischen 30 und 60 Minuten liegt. In der Tabelle addier ich die Abstände auf den Startzeitpunkt.

Der Aufbau der tabelleist unngefähr so:
Startzeitpunkt!Abstand1!Rundgang1!Abstand2!Rundgang2...!Endzeitpunkt (fest=16:30)

Das heißt ich berechnte den Startzeitpunk (wie oben, daher liegt der auch zwischen 6 und 9 Uhr) und bilde daann per zufall die Abständer zwischen den Beobachtungen, das sich sind 11 insgesamt. Ingesamt dürfen die 11 Beopbachtungenaber nicht über 16:30 Uhr hinausgehen.

Ich hoffe damit kann jemand etwas anfangen.

;)
0 Punkte
Beantwortet von
Hi,

Mein Ansatz dafür: in dieser Beispielmappe
malSchauen, ob Du das für Dich verwenden kannst, und ob der Code ausreichend kommentiert ist, damit Du das für Deine Bedürfnisse anpassen kannst.

bye
malSchauen
...