Microsoft Excel

Herbers Excel/VBA-Archiv

Schleife mit Datum


Betrifft: Schleife mit Datum von: heinzs
Geschrieben am: 09.08.2018 21:20:33

Hallo Excelfans,

folgende Funktion soll die Dauer von Anfangzeit bis Endezeit in Sekunden ermitteln; weil später noch andere Bedingungen hinzukommen können keine Zeitfunktionen verwendet werden.

Anfangszeit und Endzeit sind im Format tt.mm.yyyy hh:mm:ss vorhanden.
Eventuell fehlt bei for i1 = anfangszeit to endezeit ein step in sekunden.

Hat jemand eine Idee?

Public Function dauer(anfangszeit As Date, endezeit As Date) As Integer
gn_1 = 0
anfangszeit = anfangszeit
endezeit = endezeit
For i1 = anfangszeit To endezeit
    gn_1= gn_1+ 1
Next i1
dauer = gn_1
End Function

Danke für Hilfe!

MfG

Heinz

  

Betrifft: Ziemlich wild von: lupo1
Geschrieben am: 09.08.2018 21:35:39

1) "as Integer" lässt gerade mal 32765 als Rückgabe zu. Gemeinhin nimmt man daher "as Long".
2) Warum die beidem idem-Zuweisungen in der Function?
3) Hast Du Dich schon mal mit Excelzeiten befasst und sie verstanden? 1 Sekunde entspricht 1/86400
4) Was soll die Schleife (und überhaupt die Function), wo doch Ende-Anfang=Dauer ergibt? Wolltest Du mit dem PC Dein Zimmer heizen?
5) Außerdem zählst Du für Deine beabsichtigte Dauer auch noch 1 zuviel! Du solltest das Wesen der Schleife wenigstens nachvollziehen/testen.


  

Betrifft: Zeitschleife von: heinzs
Geschrieben am: 10.08.2018 07:55:52

Hallo Lupo1,
danke für deine Kommentare; anbei der komplette Code:

Public Function dauer(anfangszeit As Date, endezeit As Date) As Long
gn_zaehler = 0
For i1 = anfangszeit To endezeit
    gn_datum = DateValue(i1)
    gn_zeit = TimeValue(i1)
    If Weekday(gn_datum, 2) = vbSaturday Or Weekday(gn_datum, 2) = vbSunday Then
        'i1 = i1 + x so daß ich den nächsten Tag habe
    Else
        If Hour(gn_zeit) < 6 Or Hour(gn_zeit) > 18 Then
            If Hour(gn_zeit) < 6 Then
            'i1 auf 6:00 h setzen
                i1 = gn_datum + "06:00:00"
            End If
            If Hour(gn_zeit) > 18 Then
                i1 = gn_datum + 1 + "06:00:00"
            End If
        Else
            gn_zaehler = gn_zaehler + 1
        End If
    End If
Next i1
If gn_zaehler > 0 Then
    dauer = gn_zaehler - 1
End If
End Function
Wie bekomme ich die For net Schleife so hin, daß sie in 1 Sekunde Schritten stept?

MfG

Heinz


  

Betrifft: Lies Punkt 3 von: lupo1
Geschrieben am: 10.08.2018 08:43:34




  

Betrifft: AW: Ende - Anfang von: Fennek
Geschrieben am: 10.08.2018 08:49:38

Hallo,

wie Lupo in Punkt 3 sagte:

Die Zeitdifferenz ist einfach Ende - Anfang formatiert in Sekunden.
(CDbl(Ende) - CDbl(Anfang))

mfg


  

Betrifft: (End-Anf)*86400 - für Sekunden als Wert 1 von: lupo1
Geschrieben am: 10.08.2018 08:52:58




Beiträge aus dem Excel-Forum zum Thema "Schleife mit Datum"