Re: Stundenzuordnung
19.01.2003 15:16:51
Steffan
Hallo Rainer, wenn ich Dich richtig verstanden habe willst Du wissen wieviel Stunden eines Zeitbereiches innerhalb eines definierten anderen Zeitbereiches (Früh-, Spät- oder Nachtschicht) liegen?! Falls Deine Zelleinträge genauso wie von Dir dargestellt sind (Leerzeichen sind unerheblich) könnte Dir diese Funktion helfen:
Function schicht(sZeit As String, Optional sArt As String) As Single
'string zerlegen
Dim startZ As Date, endeZ As Date
startZ = Mid(sZeit, InStr(1, sZeit, ":") - 2, 5)
endeZ = Mid(sZeit, InStrRev(sZeit, ":") - 2, 5)
' Kontrollieren, ob der Zeitbereich über Mitternacht geht
If endeZ < startZ Then endeZ = endeZ + 1
'festzeiten
Dim time1 As Date, time2 As Date, time3 As Date
time1 = "00:00": time2 = "08:00": time3 = "16:00"
'Art der zu ermittelnden Schicht
'Wenn nicht angegeben, dann aus ersten Zeichen des Zellinhaltes ermitteln
If sArt = Empty Then sArt = Left(sZeit, 1)
Select Case LCase(sArt)
Case "f"
'Frühschicht
bStartZ = time1: bEndeZ = time2
Case "s"
'Spätschicht
bStartZ = time2: bEndeZ = time3
Case "n"
'Nachschicht -> Bereich enmdet am nächsten Tag
bStartZ = time3: bEndeZ = time1 + 1
Case Else
'Schichtart kann nicht ermittelt werden
MsgBox "Falsche oder fehlende Argumente!" & Chr(13) & Chr(13) & _
"Verwenden Sie die Funktion =SCHICHT() folgendermaßen:" & Chr(13) & _
"=SCHICHT(Zelle;Art) " & Chr(13) & _
Chr(13) & "Argumente:" & Chr(13) & _
"- Zelle: ein Zellbezug (z.B.: A1)" & Chr(13) & _
"- Art: Schichtzuordnung 'F', 'S' oder 'N'" & Chr(13) & _
"Hinweis:" & Chr(13) & _
"Das Argument Art kann entfallen, wenn die Schichtzuordnung " & Chr(13) & _
"an 1. Stelle der Zelle steht.", _
vbInformation, "Schichtzuordnung"
Exit Function
End Select
'Berechnung der Zugehörigkeit
If startZ >= bStartZ And startZ < bEndeZ Then
If endeZ <= bEndeZ Then schicht = 24 * (endeZ - startZ): Exit Function
If endeZ > bEndeZ Then schicht = 24 * (bEndeZ - startZ): Exit Function
End If
If startZ < bStartZ And endeZ > bStartZ Then
If endeZ <= bEndeZ Then schicht = 24 * (endeZ - bStartZ): Exit Function
If endeZ > bEndeZ Then schicht = 24 * (bEndeZ - bStartZ): Exit Function
End If
schicht = 0
End Function
Diese Funktion gehört in ein allgemeines Modul in Deiner Mappe im VB-Editor.
Erläuterung zur Funktion:
Die Funktion verwendet die Argumente 'Zelle' (erforderlich) und 'Art' (optional). 'Zelle' ist die Zelle, in der Dein Zeitbereich eingetragen ist. 'Art' kann "F", "S" oder "N" sein. Wenn Art nicht angegeben wurde, wird versucht die Art aus dem ersten Zeichen in 'Zelle' zu extrahieren.
Beispiele:
in A1 steht: "F 06:00-14:00" ; SCHICHT(A1) liefert 2
in A1 steht: "06:30-15:00"; SCHICHT(A1;"F") liefert 1,5
Löst das Dein Problem?
Steffan.