Fortgeschrittene datierte Verwendung von MSEXCEL
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 ...
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