Frage

Ich habe eine Excel -Tabellenkalkulations -Auflistungs -Jobverschiebungen ... vier Spalten, die für unsere Zwecke wichtig sind:

  • Anfangsdatum
  • Startzeit
  • Endtermin
  • Endzeit

Angesichts dieser Daten muss ich die Anzahl der Stunden für jede Verschiebung, die dazwischen fallen 7 Uhr morgens und 19 Uhr.

Ein paar Dinge, die man beachten sollte ...

  • Es gibt keine theoretische Grenze für die Länge einer Verschiebung. Es könnte zwischen 1 Stunde und 3 Tagen laufen.
  • Ich bin offen für Lösungen in C#, VB, PHP oder sogar einer erweiterten Excel -Funktion ... alles, um zur Lösung zu gelangen.
  • War es hilfreich?

    Lösung

    VBA , nicht viel Bericht über Protokolle. Ich weiß nicht, ob Sie Minuten brauchen.

    Dim i As Integer
    Dim ShiftRange As Range
    Dim dteStart As Date
    Dim dteEnd As Date
    Dim HourCount As Long
    Dim MinCount As Long
    
    Set ShiftRange = Sheet1.UsedRange
    
    For i = 2 To ShiftRange.Rows.Count
        HourCount = 0
        dteStart = CDate(Cells(i, 1) + Cells(i, 2))
        dteEnd = CDate(Cells(i, 3) + Cells(i, 4))
    
        Do While dteStart <= dteEnd
            If Hour(dteStart) >= 7 And Format(dteStart, "hh:mm") <= #7:00:00 PM# Then
                HourCount = HourCount + 1
            End If
    
            dteStart = DateAdd("h", 1, dteStart)
        Loop
    
        MinCount = HourCount * 60
    
        ''Minutes
        If CDate(Cells(i, 2)) >= #7:00:00 AM# And CDate(Cells(i, 2)) <= #7:00:00 PM# Then
             MinCount = MinCount - Minute(CDate(Cells(i, 2)))
        End If
    
        If CDate(Cells(i, 4)) >= #7:00:00 AM# And CDate(Cells(i, 4)) <= #7:00:00 PM# Then
            MinCount = MinCount + Minute(CDate(Cells(i, 4)))
        End If
    
        Cells(i, 6) = MinCount 
    Next
    

    Dies setzt voraus, dass A, B, C und D die Säulen sind, die Daten und Zeiten enthalten und dass Colum f leer ist.

    Andere Tipps

    Vielen Dank, dass Sie sehr nett und praktikabel sind.

    Ich habe eine Änderung vorgenommen, um Teile von Stunden zu ermöglichen

    Sub DayHours()
    Dim i As Integer
    Dim ShiftRange As Range
    Dim dteStart As Date
    Dim dteEnd As Date
    Dim MinCount As Double
    
    Set ShiftRange = Sheet1.UsedRange
    
    For i = 3 To ShiftRange.Rows.Count
    MinCount = 0
    dteStart = CDate(Cells(i, 3) + Cells(i, 4))
    dteEnd = CDate(Cells(i, 5) + Cells(i, 6))
    
    Do While dteStart <= dteEnd
        If Format(dteStart, "hh:mm") >= #7:00:00 AM# And Format(dteStart, "hh:mm") < #7:00:00 PM# Then
            MinCount = MinCount + 1
        End If
    
        dteStart = DateAdd("n", 1, dteStart)
    Loop
    Cells(i, 10) = MinCount / 60
    Next
    End Sub
    
    Lizenziert unter: CC-BY-SA mit Zuschreibung
    Nicht verbunden mit StackOverflow
    scroll top