Tijdverschil met middernacht tussen begin en eindtijd

Status
Niet open voor verdere reacties.

richard1102

Nieuwe gebruiker
Lid geworden
9 aug 2013
Berichten
4
Hallo,

Ik moet het tijdverschil uitrekenen tussen twee waarden. Nu kan middernacht tussen deze waarden liggen, maar hoe los ik dat op? Ik krijg óf een negatieve tijdwaarde, óf de waarden is 1440 .

De kolommen I en H worden van elkaar afgetrokken, behalve als de waarde in de betreffende cel in kolom I kleiner is dan H. Maar daar begint het probleem en ik krijg het maar niet voor elkaar om de juiste waarde te tonen.

Ik heb behoorlijk gespit naar de oplossing - er zouden toch meer vragen rondom dit onderwerp gesteld moeten zijn? Maar, wellicht kijk ik niet goed.:(

Code:
Sub Verschil_bepalen()

With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .DisplayAlerts = False
End With

    Columns("A:E").Select
    Selection.NumberFormat = "General"

    Columns("F:F").Select
    Selection.NumberFormat = "dd:mm:yy"


    Columns("H:J").Select
    Selection.NumberFormat = "h:mm:ss;@"
   
    Dim Voor_middernacht As Integer
    Dim Na_middernacht As Integer
    Dim Resultaat As Integer

For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1

    
       
     Range("H" & i).NumberFormat = "hh:mm:ss;@"
         
     Range("I" & i).NumberFormat = "hh:mm:ss;@"
         
     Range("J" & i).NumberFormat = "[mm]:ss"
   
     Range("K" & i).NumberFormat = "[mm]:ss"
              
    
     
     
     
     
    
    If Range("I" & i) >= Range("H" & i) Then _

         Range("J" & i) = Range("I" & i) - Range("H" & i)
        
        Else _
        
            
            
        ' Voor_middernacht = (TimeValue(Range("H" & i)))
         ' Na_middernacht = (TimeValue(Range("H" & i)) + 1440)
        
        
        
        Voor_middernacht = Range("H" & i) - (Range("I" & i))
        
        Range("J" & i) = Voor_middernacht + (Range("I" & i))
       
        
        
        
            
    End If
    
     
     
        
    On Error GoTo Laatste
    
    
Next i
 
Code:
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        Range("H" & i).Resize(, 2).NumberFormat = "hh:mm:ss;@"
        With Range("J" & i)
            .Resize(, 2).NumberFormat = "[mm]:ss"
            .Value = Format((Range("I" & i) - Range("H" & i)) - (Range("I" & i) < Range("H" & i)), "hh:mm:ss")
        End With
    Next i
 
Richard,

Je hoeft niet zo'n probleem te maken met nachten etc. mits je er van uit kan gaan dat een periode niet langer dan
24 uur duurt.
Stel je werkt van 08:00 tot 12:00, ik tel dan 12:00 + een dag (24 uur ) - 8 uur = 28 uur waar ik dan alles boven de vierentwintig uur
aftrek ik houd dan 4 uur over.
Stel je werkt van 12:00 tot 08:00, ik tel dan 08:00 + een dag (24 uur ) - 12 uur = 20 uur waar ik dan alles boven de vierentwintig uur
aftrek ik houd dan 4 uur over.

Hierbij een implementatie van mijn methode, ik gebruik hier de modulus functie, maar omdat deze altijd een integer teruggeeft moet ik de
boel met 10000 vermenigvuldigen om een correcte uitkomst te krijgen.

Code:
Sub Verschil_bepalen()

Columns("A:E").NumberFormat = "General"
Columns("F:F").NumberFormat = "dd:mm:yy"
Columns("H:I").NumberFormat = "h:mm:ss;@"
Columns("J:K").NumberFormat = "h:mm"

For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
    Range("J" & i) = ((Range("I" & i) * 100000 + 100000 - Range("H" & i) * 100000) Mod 100000) / 100000
Next i

End Sub

Veel Succes.
 
Hallo Elsendoorn2134,

Het werkt! Ik had de 'Mod' eerder al gezien maar nooit maal 10.000 gedaan - dus werkte het niet. Thanks!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan