![]() |
Betrifft: kleines aber feines Ärgernis
von: Markus
Geschrieben am: 31.07.2014 08:25:23
Hallo!
Um meine Arbeitszeiten aufzunehmen benutze ich ein Excel Tool das mir dann alles berechnet.
Mir ist mir dabei was aufgefallen und möchte hier erfragen wie man das Ändern kann.
Zur Erklärung: zuerst mal ein Beispiel https://www.herber.de/bbs/user/91802.xls
Das Tool rechnet die Pausenzeiten raus. Diese sind bis 6h 0 min, ab 6h bis 9h 30min und dann bis 10h 45min.
Das Makro fragt dies ab. Funktioniert soweit ganz gut.
Es gibt aber ein kleines Detail wo es nicht klappt. Es gibt die Abfrage wenn die Arbeitszeit nach 12:30 Uhr endet und vor 12 Uhr beginnt wird eine Pause von 30min ausgegeben, obwohl auch die Abfrage über die Länge der Arbeitszeit <=6h ebenfalls Wahr ist. Ergebnis: Zwar endet die Arbeitszeit nach 12:30 Uhr, aber sie ist auch kleiner 6 Stunden. Trotzdem werden 30 min Pausenzeit angegeben. Warum?
Am besten mal das Beispiel durchgehen. Da wird es bestimmt verständlicher.
Gruß
Markus
Sub Zeiten() Monat = ActiveSheet.Cells(3, 11) Worksheets(Monat).Activate 'Tabelle aktueller Monat For J = 1 To 2 'linker und rechter Spaltenblock If (J = 1) Then 'Spalten linker Zeitenblock St = 3 En = 4 Da = 5 Pm = 7 Pd = 8 Else 'Spalten rechter Zeitenblock St = 9 En = 10 Da = 11 Pm = 13 Pd = 14 End If For I = 1 To 31 'Zeilen mit Zeiten Po = 0 'Pausenmodell Pa = 30 'Pausendauer Range(Cells(10 + I, Da), Cells(10 + I, Da)) = "" Range(Cells(10 + I, Pm), Cells(10 + I, Pm)) = "" Range(Cells(10 + I, Pd), Cells(10 + I, Pd)) = "" ActiveSheet.Cells(1, 26) = Range(Cells(10 + I, St), Cells(10 + I, St)) ActiveSheet.Cells(2, 26) = Range(Cells(10 + I, En), Cells(10 + I, En)) ActiveSheet.Cells(3, 26) = "=ISTEXT(R1C26)" 'beinhaltet Zelle Text ActiveSheet.Cells(4, 26) = "=ISTEXT(R2C26)" 'wenn Zelle Text beinhaltet, nicht bearbeiten If ((ActiveSheet.Cells(3, 26) = True) Or (ActiveSheet.Cells(4, 26) = True)) Then Else ActiveSheet.Cells(1, 25) = "=HOUR(TEXT(R1C26,""hh:mm:ss""))" 'dezimale _ Stunde ah ActiveSheet.Cells(2, 25) = "=HOUR(TEXT(R2C26,""hh:mm:ss""))" ' _ eh ActiveSheet.Cells(3, 25) = "=(MINUTE(TEXT(R1C26,""hh:mm:ss""))/60)" 'dezimale _ Minute am ActiveSheet.Cells(4, 25) = "=(MINUTE(TEXT(R2C26,""hh:mm:ss""))/60)" ' _ em ah = ActiveSheet.Cells(1, 25) eh = ActiveSheet.Cells(2, 25) am = ActiveSheet.Cells(3, 25) em = ActiveSheet.Cells(4, 25) 'wenn Zelle ohne Inhalt, nicht bearbeiten If (IsEmpty(ActiveSheet.Cells(10 + I, St)) Or IsEmpty(ActiveSheet.Cells(10 + I, En)) _ ) Then 'wenn Zelle leer, nichts Else 'wenn Start bis 12:00 und Ende ab 12:30 If (((ah + am) <= 12) And ((eh + em) >= 12.5)) Then 'wenn Gesamtzeit <= 9.5h If ((eh + em - ah - am) <= 9.5) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am - 0.5 'wenn 9.5h < Gesamtzeit <= 9.75h ElseIf (((eh + em - ah - am) > 9.5) And ((eh + em - ah - am) <= 9.75)) Then ActiveSheet.Cells(10 + I, Da) = "9" Po = 5 Pa = 45 'wenn 9.75h < Gesamtzeit <= 10.75h ElseIf (((eh + em - ah - am) > 9.75) And ((eh + em - ah - am) <= 10.75)) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am - 0.75 Po = 5 Pa = 45 'wenn Gesamtzeit > 10.75h ElseIf ((eh + em - ah - am) > 10.75) Then ActiveSheet.Cells(10 + I, Da) = "10" Po = 5 Pa = 45 End If 'wenn Start ab 12:30, d.h. ohne Pause Else Po = " " Pa = 0 'wenn Start nach 12:00 oder Ende vor 12:30 If (((ah - am) > 12) And ((eh + em) < 12.5)) Then ActiveSheet.Cells(10 + I, Da) = 0 'wenn Gesamtzeit <= 6h, ohne 30 min Pause ElseIf ((eh + em - ah - am) <= 6) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am 'wenn 9h < Gesamtzeit <= 9.25h ElseIf ((eh + em - ah - am) > 9 And (eh + em - ah - am) <= 9.25) Then ActiveSheet.Cells(10 + I, Da) = 9 'wenn 9.25h < Gesamtzeit <= 10.75h ElseIf ((eh + em - ah - am) > 9.25 And (eh + em - ah - am) <= 10.25) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am - 0.25 'wenn Gesamtzeit < 10.75h ElseIf ((eh + em - ah - am) > 10.25) Then ActiveSheet.Cells(10 + I, Da) = 10 End If End If ActiveSheet.Cells(10 + I, Pm) = Po ActiveSheet.Cells(10 + I, Pd) = Pa End If End If Next I Next J End Sub
![]() ![]() |
Betrifft: AW: kleines aber feines Ärgernis
von: fcs
Geschrieben am: 31.07.2014 10:35:25
Hallo Markus,
du gibst ja generell eine Pausenzeit von 30 Minuten vor.
für die Bedingungen wenn Start bis 12:00 und Ende ab 12:30 hast du als erstes eine Prüfung
If ((eh + em - ah - am) <= 9.5) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am - 0.5 ElseIf ...Da Werte <=6 diese Bedingung auch erfüllen, werden 30 Minuten Pausendauer ausgegeben.
If ((eh + em - ah - am) <= 6) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am - ???? Po = ??? Pa = ??? ElseIf ((eh + em - ah - am) <= 9.5) Then ActiveSheet.Cells(10 + I, Da) = eh + em - ah - am - 0.5 ElseIf ...Gruß
![]() ![]() |
Betrifft: AW: kleines aber feines Ärgernis
von: Markus
Geschrieben am: 01.08.2014 10:46:39
Super danke.
Es geht.
![]() |