excel-creator
Goto Top

Minutenweise Steigerung der Pausenzeit zwischen 2 Arbeitszeiten

Hallo zusammen,
ich bin dabei, einen speziellen Stundennachweis für Mitarbeiter/Kollegen zu basteln, die neben unterschiedlichen Teilzeitsystemen in einem 3-Schichtsystem arbeiten und zudem noch spezielle Pausenzeiten haben.
Ich habe den Stundennachweis so gut wie fertig und alles funktioniert wunderbar, aber 2 Berechnungen bekomme ich einfach nicht in die vorhandene Formel intergiert:
Soll-Beispiel: Arbeitsbeginn 08:00 Uhr - Arbeitsende 14:09 Uhr = Pausenabzug 0:09 Stunden (siehe Zeile 9 / Spalte K).
Bei einer Arbeitszeit von 6:00 Stunden darf keine Pause abgezogen werden. Ab einer Arbeitszeit von 06:15 Stunden bis 09:00 Stunden werden 30 Minuten Pause abgezogen, ab 09:15 Stunden werden 0:45 Minuten abgezogen.
Das Problem ist die minutenweise Berechnung der Pause zwischen einer Arbeitszeit von 6:00 Stunden und 6:15 Stunden bzw. 9:00 Stunden und 9:15 Stunden. Vorgegeben ist, dass als Pause bei einer Arbeitszeit von mehr als 6:00 Stunden, aber weniger als 6:15 Stunden nur der Minutenanteil, der über 6:00 Stunden oder über 09:00 Stunden liegt, als Pause abgezogen werden darf.
Ausprobiert habe ich schon: =wenn(h8>m2"h8-m2" und =wenn(h8>m2"=REST(h8-m2;1)". Beide Formeln habe ich vor WENN(H9=$M$2 gesetzt. Doch sie werden beide nicht berechnet sondern als Text ausgegeben.
Das zweite Problem ist die Integration einer Formel in die vorhandene Formel, die auch eine Arbeitszeit über 24:00 Uhr hinaus richtig berechnet.
Hat jemand vielleicht eine Idee, wie ich das hinbekommen kann?

LG Astrid
screenshot 2024-10-26 150437

Content-ID: 669053

Url: https://administrator.de/contentid/669053

Printed on: November 13, 2024 at 11:11 o'clock

MirkoKR
MirkoKR Oct 26, 2024 at 15:18:56 (UTC)
Goto Top
Ich habe gerade keine Formel für dich ...

Aber: seit 2022 gibt es doch Erfassungspflichten, die das erübrigen sollten?

https://www.google.com/search?q=zeiterfassung+pflicht
excel-creator
excel-creator Oct 26, 2024 at 15:32:05 (UTC)
Goto Top
Hallo Mirko,
die gesetzlichen Erfassungspflichten sind bei dieser Berechnung bereits berücksichtigt. Im Öffentlichen Dienst gelten andere Regeln als in der freien Wirtschaft. Sie werden u.a. anderem von dem Tarifvertrag und zusätzlichen länderabhängigen Regelungen bestimmt. Und bei uns gibt es diese besondere Pausenregelung.
MirkoKR
MirkoKR Oct 26, 2024 at 15:38:07 (UTC)
Goto Top
Zitat von @excel-creator:
Im Öffentlichen Dienst gelten andere Regeln als in der freien Wirtschaft.

OK zunächst wollte ich eine Umsetzung der Regeln auch öffentlichen Dienst empfehlen ...

Dann aber [Ironie ON] las ich "öffentlicher Dienst". Die Buchung von Pausenzeiten erfordert natürlich, das MA wach ist [/Ironie OFF]
(Sorry, Freitag war gestern, aber der musste sein 🤪)
excel-creator
excel-creator Oct 26, 2024 at 17:18:12 (UTC)
Goto Top
Ist schon ok face-smile

Wir haben eigentlich eine gute elektronische Zeiterfassung, allerdings nur für Beschäftigte mit normalen Arbeitszeiten von 06:00 Uhr bis 20:00 Uhr.
Leider lässt sich unser elektronisches Zeiterfassungssystem nicht mit einem Arbeitszeitmodell kombinieren, das Arbeitszeiten wie in einem Krankenhaus oder bei der Polizei mit Arbeitszeiten von 06:00 Uhr bis nach 24:00 Uhr hat. Die Buchungen der Mitarbeiter/Kollegen führen hier immer wieder zu falschen Auswertungen, bei denen dann statt eigentlich 5 Überstunden 22 Minusstunden herauskommen. Diese Problem besteht mittlerweile schon seit mehreren Jahren.
Dafür versuche ich eine Lösung zu finden, die von den Mitarbeitern/Kollegen parallel angewendet werden kann, damit sie zum Einen eine Kontrolle über ihren tatsächlichen Stundensaldo haben, und zum Anderen einen Nachweis für die Nacherfassung ihrer geleisteten Stunden, wenn denn unser Zeiterfassungssystem irgendwann endlich mal richtig funktionieren sollte.
Was die Pausen angeht, so gilt bei uns, dass ein Mitarbeiter ab 6 Stunden Arbeitszeit einen Anspruch auf 30 Minuten Pause hat. Arbeitet er an einem Tag aber nur 06:09 Stunden, darf ihm nicht die volle Pause abgezogen werden, weil dann die Stundenanzahl, die die Grundlage für den Pausenanspruch ist, unterschritten werden würde. Daher diese besondere Pausenregelung.
MirkoKR
MirkoKR Oct 26, 2024 at 17:28:53 (UTC)
Goto Top
... ich quote hier mal nicht ...

Das ist aber kein Problem der Zeiterfassung sondern der dahinter liegenden Software ... und: z.B. Pollizeien, Feuerwehren, Rettungsdienste, etc. haben sicher ein deutlich komplexeres Zeitmodell (danke!)

Wenn eure Zeiterfassung die Buchungsdaten in einer xSQL Datenbank ablegt, gibt es viele Möglichkeiten, das auszuwerten
HansDampf06
HansDampf06 Oct 26, 2024 updated at 18:14:40 (UTC)
Goto Top
Wo soll denn dabei ein besonderes mathematisches Problem liegen? Das ist eine Sachaufgabe im Anspruchsbereich 4. bis 6. Schulklasse:

Regulär - so wohl nicht bei Euch - ist es so, dass bei 6,0 Stunden keine Pausenzeit sowie ab 6,0 bis 9,0 Stunden 0,5 Stunden und bei mehr als 9,0 Stunden 0,75 Stunden als Pausenzeit abzuziehen ist/sind.

Würde das streng eingehalten werden, so würde das bedeuten, dass bei einer Arbeitszeit von 6 Stunden und genau einer Minute nur noch 5 Stunden und 31 Minuten als effektive Arbeitszeit verbleiben, obschon bei nur einer Minute weniger an Arbeitszeit die gesamten 6 Stunden verblieben. Das führt dazu, dass eine Pausenzeit nur in der Höhe abgezogen werden darf, dass die 6 Stunden effektive Arbeitszeit in jedem Fall erhalten bleiben. Somit steht folgender mathematischer Zusammenhang fest (AZ=Arbeitszeit; PZ=Pausenzeit):
1. AZ <= 6 Stunden ==> 0 Stunden PZ
2. AZ >= 6,5 Stunden ==> 0,5 Stunden PZ
ergo: 3. AZ > 6 Stunden UND AZ < 6,5 Stunden ==> PZ = AZ - 6

In einer Excel-Formel für die Berechnung von PZ:
=WENN([AZ]<=6;0;WENN([AZ]>=6,5;0,5;[AZ]-6))
Natürlich ist [AZ] durch das Tabellenfeld mit dem AZ-Wert zu ersetzen. Also simpler geht es nun wirklich nicht.

Die Anpassung dieser Formel, dass bei Euch die Grenze für das Erreichen der vollen halben Stunde Pausenzeit schon bei 6,25 Stunden liegen soll, schaffst Du ganz gewiss allein. Das habe ich bewusst als verbleibende Denkaufgabe belassen.
Dasselbe gilt für die Erweiterung der vorstehenden Formel, wenn AZ >= 6,5 und AZ <= 9,0 Stunden usw. Kleine Denkhilfe: Die zweite WENN-Formel im WAHR-Wert um die weiteren nötigen WENN-Formeln erweitern. Freilich kann die zweite-WENN-Formel so umgebaut werden, dass mit den weiteren WENN-Formel beim FALSCH-Wert weitergemacht wird.
Eine weitere Variante wäre, für die Zeiten ab 9,0 Stunden die zusätzliche Pausenzeit schlicht zu addieren. Darum die vorstehende Formel zu ergänzen, ist noch einfacher dank Copy+Paste und ein bisschen Zahlenkorrektur.

Ein viel größeres und praktisch gar nicht lösbares Problem ist Eure Regelung zur Pausenzeit, wonach schon bei 6,25 Studen eine volle halbe Stunde abgezogen werden soll, obschon bei nur einer Minute weniger Arbeitszeit nur 14 Minuten Pausenzeit abgezogen werden dürfen. Denn werden ab 6,25 Stunden 0,5 Stunden abgezogen, so verbleibt eben zwischen 6,25 und 6,5 Stunden keine effektive Arbeitszeit von 6 Stunden, von denen eigentlich eine Pausenzeit nicht abgezogen werden dürfte. In diesem Zeitbereich von 6,25 bis 6,5 führt Eure Regelung zu einem rechtlichen Wertungswiderspruch, der im Rahmen dieser Regelung nicht aufgelöst werden kann. Aus diesem Grund gibt es auch keine brauchbare Umsetzungsmöglichkeit für diesen Zeitbereich, auch wenn die zugehörige mathematische Formel selbstredend gar keine Notiz von diesen juristischen Problemen nimmt und schlicht das berechnet, was sie gemäß Regelung berechnen soll.
Freilich ist das Problem relativ einfach juristisch auflösbar, aber das ist ein anderes Thema und gehört nicht in dieses Forum. Hier bedarf es einer Klärung bei Euch. Ansonsten werden die Arbeitnehmer in diesem Grenzzeitbereich darauf achten müssen, was sie als Arbeitszeiten aufschreiben, sofern das nicht automatisiert erfasst wird, oder wann sie tatsächlich ihre Arbeit beenden.

Dein weiteres Problem mit Deiner Formel ist, dass Du nicht wirklich rechnest, sondern Text-Werte mit Zahl-Werten unsinng mischst. Du solltest Dir angewöhnen Zeiten - so wie das Excel ebenfalls macht - als Zahlenwert zu begreifen und darauf Deine Berechnungen zu stützen, und zwar auch dann, wenn Du einen unveränderlichen Zeitwert angeben möchtest. 1 Minute ist ein Wert von 1 / (24*60)! Kleine Denkaufgabe: Warum ist das wohl so? Warum gibt dann die Zellenformatierung für die Uhrzeit die Werte (grundsätzlich) zutreffend aus? [Zusatzdenkaufgabe: Warum wird Excel bei einer solchen Dezimalzahl manchmal den Uhrzeitwert nicht richtig treffen - Abweichung um +/- 1 Minute?]

Tipp: In dieser Hinsicht ist die oben dargestellte Formel offenkundig noch anzupassen, weil Du ansonsten von der Wiedergabe der Zeitwerte überrascht sein wirst.

Viele Grüße
HansDampf06
HansDampf06
HansDampf06 Oct 26, 2024 at 18:12:48 (UTC)
Goto Top
Zitat von @excel-creator:
Die Buchungen der Mitarbeiter/Kollegen führen hier immer wieder zu falschen Auswertungen, bei denen dann statt eigentlich 5 Überstunden 22 Minusstunden herauskommen.
Wenn diese "Berechnungswunder" in Excel auftreten, so liegt das abermals daran, dass Ihr - wie ich das bereits skizziert habe - nicht wirklich mit Zeitwerten rechnet und / oder solche Fälle nicht logisch auffangt. Hier scheint dann auch das Verständnis zu fehlen, um was für Werttyp es sich bei diesen Zeitwerten handelt und wie damit bei Berechnungen umzugehen ist. Siehe meinen vorherigen Kommentar!

Zumeist ist an solchen Stellen ein WENN-Formel-Konstrukt höchst simpel zu realisieren. Das ist eigentlich Berechnungsstandard bei Uhrzeiten.

Dafür versuche ich eine Lösung zu finden, die von den Mitarbeitern/Kollegen parallel angewendet werden kann, damit sie zum Einen eine Kontrolle über ihren tatsächlichen Stundensaldo haben, und zum Anderen einen Nachweis für die Nacherfassung ihrer geleisteten Stunden, wenn denn unser Zeiterfassungssystem irgendwann endlich mal richtig funktionieren sollte.
Lass mich raten?! Euer Zeitsystem liefert die reinen Stundenzeiten, die Ihr unbesehen nach Excel oder wohin auch immer übernehmt. Daraus entstehen dann unweigerlich diese "Berechnungswunder", weil: siehe zuvor.

Was die Pausen angeht, so gilt bei uns, dass ein Mitarbeiter ab 6 Stunden Arbeitszeit einen Anspruch auf 30 Minuten Pause hat. Arbeitet er an einem Tag aber nur 06:09 Stunden, darf ihm nicht die volle Pause abgezogen werden, weil dann die Stundenanzahl, die die Grundlage für den Pausenanspruch ist, unterschritten werden würde. Daher diese besondere Pausenregelung.
Wenn das die zugrundeliegende Denke für Eure Regelung ist, liegt es für jeden offenkundig auf der Hand, wie der Wertungswiderspruch am Ende - auch juristisch - zu lösen sein wird = siehe meine Formel!

Viele Grüße
HansDampf06
TwistedAir
Solution TwistedAir Oct 26, 2024 updated at 19:18:02 (UTC)
Goto Top
Moin,

du könntest zur für die Pausenabzüge die "Zeit"-Formel verwenden (Format =ZEIT(Stunden;Minuten;Sekunden), beispielweise

=WENN(A2<=ZEIT(6;;);A2;WENN(A2<=ZEIT(6;30;);ZEIT(6;;);WENN(A2<=ZEIT(9;30;);A2-ZEIT(;30;);WENN(A2<=ZEIT(9;45;);ZEIT(9;;);WENN(A2<=ZEIT(10;45;);A2-ZEIT(;45;);"Arbeitszeitüberschreitung")))))  

Erläuterung:
  • bis einschließlich 6 Stunden ("<=", "kleinergleich") bleibt die Zeit wie sie ist, andernfalls
  • bis einschließlich 6,5 Stunden wird die Zeit auf 6 Stunden gesetzt, andernfalls
  • bis 9,5 Stunden (inkl. der 30 Minuten Pause) werden 30 Minuten abgezogen, andernfalls
  • bis 9,75 Stunden wird die Zeit auf 9 Stunden gesetzt, andernfalls
  • bis 10,75 Stunden werden 45 Minuten abgezogen, andernfalls "Ausgabe Arbeitszeitüberschreitung"

Es wurde mal angenommen, dass die Nettoarbeitszeit von 10 Stunden nicht überschritten werden darf; die Grenze kannst du natürlich auf deine Bedürfnisse zuschneiden.

In Excel sieht das dann so aus (die Differenz-Angabe ist nur zur Verdeutlichung aufgeführt):

administrator-excel

Das zweite Problem ist die Integration einer Formel in die vorhandene Formel, die auch eine Arbeitszeit über 24:00 Uhr hinaus richtig berechnet.

Wenn die Endzeit kleiner als die Anfangszeit ist, addiere auf die Endzeit 24 Stunden dazu:

Anfang 8:00 Uhr, Ende 16:00 Uhr -> Ende - Anfang = 8:00 Stunden
Anfang 20:00 Uhr, Ende 4:00 Uhr -> (Ende + 24 Stunden) - Anfang = 28:00 - 8:00 = 8:00 Stunden

Grüße
TA

Edit:
Der zweite Teil mit dem Hinzufügen von 24 h bei Tagesübergang funktioniert in dieser Form nur, wenn ein Tageswechsel zu berücksichtigen ist. Bei mehreren Übergängen müsste die Differenz mit dem kompletten Datum berechnet werden.
Und aus aktuellem Anlass (ja, in dieser Nacht ist es wieder so weit): Zeitumstellung! Da wird es kniffelig. Wenn Anfangs- oder Endzeit 2:30 Uhr beträgt - ist das dann das erste oder zweite (nach Zurückstellung der Uhr) "2:30" Uhr? face-wink
excel-creator
excel-creator Oct 26, 2024 updated at 20:04:01 (UTC)
Goto Top
Das stimmt . Das sehe ich genauso face-smile
Leider liegt die Betreuung unserer Zeiterfassungssoftware nicht in unserer Hand, sondern an übergeordneter Stelle.
TwistedAir
TwistedAir Oct 26, 2024 at 20:09:38 (UTC)
Goto Top
Zitat von @excel-creator:

Hallo zusammen,
ich bin dabei, einen speziellen Stundennachweis für Mitarbeiter/Kollegen zu basteln, die neben unterschiedlichen Teilzeitsystemen in einem 3-Schichtsystem arbeiten und zudem noch spezielle Pausenzeiten haben.

So speziell sind die Pausenzeiten nicht, sie ergeben sich aus dem Arbeitszeitgesetz:

Arbeitszeitgesetz (ArbZG)
§ 4 Ruhepausen
Die Arbeit ist durch im voraus feststehende Ruhepausen von mindestens 30 Minuten bei einer Arbeitszeit von mehr als sechs bis zu neun Stunden und 45 Minuten bei einer Arbeitszeit von mehr als neun Stunden insgesamt zu unterbrechen. Die Ruhepausen nach Satz 1 können in Zeitabschnitte von jeweils mindestens 15 Minuten aufgeteilt werden. Länger als sechs Stunden hintereinander dürfen Arbeitnehmer nicht ohne Ruhepause beschäftigt werden.
https://www.gesetze-im-internet.de/arbzg/__4.html

Das Wörtchen "mindestens", von mir im Zitat hervorgehoben, enthält noch ein kleines Schmankerl für dein Formular: wenn nicht vom Arbeitgeber gleichzeitig festgelegt ist, dass die Arbeitsunterbrechung zugleich höchstens 30 Minuten beträgt, kann der Fall eintreten, dass die geleistete und die berechnete Arbeitszeit voneinander abweichen.

Beispiel:
Arbeitnehmer arbeitet 6,0 Stunden, macht eine Stunde Pause und arbeitet noch 2,0 Stunden bis Feierabend.
Gesamtzeit: 9,0 Stunden
Geleistete Arbeitszeit: 8,0 Stunden.
Berechnete Arbeitszeit: 8,5 Stunden (da 0,5 Stunden fest in der Formel)

Eventuell muss dieser Umstand (bspw. mit einer Spalte für abweichende Zeiten) abgefangen werden.

Ergänzende Info zu der 10-Stunden-Grenze im ersten Post - ergibt sich aus
§ 3 Arbeitszeit der Arbeitnehmer
Die werktägliche Arbeitszeit der Arbeitnehmer darf acht Stunden nicht überschreiten. Sie kann auf bis zu zehn Stunden nur verlängert werden, wenn innerhalb von sechs Kalendermonaten oder innerhalb von 24 Wochen im Durchschnitt acht Stunden werktäglich nicht überschritten werden.
https://www.gesetze-im-internet.de/arbzg/__3.html

Viel Erfolg mit deinem Formular.
TA
HansDampf06
Solution HansDampf06 Oct 26, 2024 at 20:45:07 (UTC)
Goto Top
Zitat von @TwistedAir:
Eventuell muss dieser Umstand (bspw. mit einer Spalte für abweichende Zeiten) abgefangen werden.
Wenn die tatsächliche Verteilung der Arbeitszeit an einem Arbeitstag den automatisierten Abzug der Regelpausenzeiten nicht zulässt, muss der Arbeitnehmer eben zwei Arbeitszeiten eingeben = zwei Zeilen.

Das dann aber mit einer einzigen Formel abzufangen, wird nicht gelingen. Vielmehr wird es hier erforderlich werden, entweder mit Hilfsspalten zu arbeiten oder auf eine per Makro benutzerdefinierte Funktion auszuweichen, was tendentiell effektiver / flexibler sein wird.
In den Hilfsspalten wären zunächst die Differenzen zwischen den End- und Anfangszeiten der einzelnen Zeilen desselben Arbeitstages erfasst werden. Sodann müsste deren Summe darauf geprüft werden, ob die Summe die relevante Pausenzeit erreicht oder über-/unterschreitet. In Abhängigkeit wäre die Summe der aus jeder Zeile des Arbeitstages resultierenden Arbeitszeitens zu korrigieren.
Ähnlich wäre das im Makro umzusetzen, aber es entfallen die notwendigen Hilfsspalten für die benötigten Zwischenergebnisse. Im Makro könnten auch andere Aspekte eingebaut werden.

Bei dem Zeitsystem, das ich für Projektarbeiten benutzen muss, wird immer die gesetzliche Pausenzeit abgezogen - auch bei mehreren Arbeitszeitangaben an einem Arbeitstag. Es liegt dann an mir, die Arbeitszeit so einzugeben, dass die berechnete Arbeitszeit dem entspricht, was ich tatsächlich gearbeitet habe. Mache ich also mehr als eine halbe Stunde Pause, so muss entweder die erste oder zweite Zeile diese halbe Stunde Regelpausenzeit umfassen. Auf der Eingabeseite ist vermerkt, was an Pausenzeiten automatisch abgezogen wird.
Ein ähnliches Vorgehen dem medizinischen Personal zu vermitteln, sollte kein größeres Problem darstellen. Dann bedarf es keiner Hilfszeilen, sondern nur einer kumulierten Summierung der eingetragenen Arbeitszeiten, während erst bei der letzten Zeile nach Maßgabe der Summe die Pausenzeit abgezogen wird.

Viele Grüße
HansDampf06
excel-creator
excel-creator Oct 26, 2024 at 20:47:04 (UTC)
Goto Top
Hallo HansDampf,

ich danke Dir für Deinen ausführlichen Kommentar und die Gedanken, die Du Dir zu meinem Problem gemacht hast, insbesondere bzgl. des juristischen Wertungswiderspruches zu unserer Pausenregelung.
Was Deine Kommentare zu meinen Beitragsinhalten angeht, muss ich zu meiner Verteidigung richtigstellen, dass diese "Berechnungswunder" von unserer Zeiterfassungssoftware, die nicht von uns betreut wird, verursacht werden, und von denen ich selbst als Mitarbeiterin ebenfalls betroffen bin.
Über eine juristische Lösung denken ich und meine Kollegen nach, wenn die Korrektur-Programmierung in unserer Zeiterfassungssoftware, die von übergeordneter Stelle betreut wird, abgeschlossen sind und nicht zu einem zufriedenstellenden Ergebnis führen.
Doch bis dahin versuche ich in Excel eine Lösung zu erstellen, die unsere aktuelle Zeiterfassungsstruktur (inkl. unserer Pausenregelung) abbildet, aber ohne irgendwelche "Berechnungswunder".
Einige Deiner Formelvorschläge hatte ich schon selbst versucht. Mein Problem war die Integration in die vorhandene Formel und nicht das Format oder die Formel selbst. Vielleicht liegt es wirklich an der Vermischung von Text- und Zahlenwerten.
Ich werde es ausprobieren face-smile
Blackmann
Blackmann Oct 27, 2024 updated at 19:20:39 (UTC)
Goto Top
N'Abend,

halte mich mal an Deine Vorgaben ganz oben.
Ich würde das Problem mit einer Selbstdefinierten Funktion 'Pausenzeit' lösen:

1

Argument1: Schichtzelle
Argument2: Stundenanteil Pausenzeit
Argument3: Minutenanteil Pausenzeit

Im Modul zum Blatt dann die Function integrieren:

Function Pausenzeit(ZeileD, Stundenzeit, Minutenzeit)

Pause = Stundenzeit + Minutenzeit / 100
If Pause >= 0 Then Pausezeit = 0
If (Pause >= 6.01) And (Pause <= 6.14) Then Pausenzeit = Minutenzeit
If Pause >= 6.15 Then Pausenzeit = 30
If (Pause >= 9.01) And (Pause <= 9.14) Then Pausenzeit = Minutenzeit
If Pause >= 9.15 Then Pausenzeit = 45

If ZeileD = "Arbeitsfrei" Then Pausenzeit = ""  
If ZeileD = "Feiertag" Then Pausenzeit = ""  
If ZeileD = "Fortbildung" Then Pausenzeit = ""  

End Function

- Zur besseren Übersichtlichkeit berechne ich mir die Pause als Dezimalwert.
- Frage dann die Zeitbereiche ab und ordne die Pausenzeiten zu
- Falls ein Sonderfall vorkommt, zB. "Feiertag", dann keine Pausenzeit.

Sollte so erst mal funktionieren und kann/sollte angepasst werden.

BG MB
HansDampf06
HansDampf06 Oct 27, 2024 updated at 23:31:13 (UTC)
Goto Top
Zitat von @Blackmann:
Sollte so erst mal funktionieren und kann/sollte angepasst werden.
Ganz und gar nicht, weil grundlegende Zusammenhänge schlichtweg ignoriert werden. Oder woher nimmst Du, dass die Formel
Pause = Stundenzeit + Minutenzeit / 100
richtig sein könnte?
INDES: Was haben wir in der Schule bereits in der Unterstufe (= 2. / 3. Klasse) hinsichtlich der Uhrzeit gelernt?! Der Tag besteht aus 24 Stunden und die Stunde aus 60 Minuten!

Deine Formel führt also offenkundig in die Irre, weil dann 90 Minuten nicht realiter 1,5 Stunden, sondern nur 0,9 Stunden wären. Was soll solch ein Unfug? Mir scheint, dass abermals nicht verstanden wird, wie Excel mit Zeitwerten rechnet und wie sinnvoll es ist, dies auch der eigenen Denk- und Berechnungsweise zugrundezulegen.

Nicht viel besser ist dieser Teil der von Dir vorgeschlagenen Funktion:
If (Pause >= 9.01) And (Pause <= 9.14) Then Pausenzeit = Minutenzeit
Hast Du wirklich einmal nachgedacht und selbst gerecht, was dabei herauskommen würde? Meinst Du ernsthaft, es wären eine halbe Stunde plus eine bis vierzehn Minuten? Weit gefehlt!

Überdies ist Dein Vorschlag programmtechnisch wenig durchdacht. Warum soll die Funktion jedes Mal alle Varianten durchprüfen, obschon immer nur eine Variante zutreffend sein kann. Ist das für solche Anwendungsfälle hervorragende und vorzugswürdige ElseIf etwa unbekannt?
Was ist die Folge, wenn Excel diese benutzerdefinierte Funktion in einer größeren Anzahl bei einer Blattaktualisierung durchläuft und dabei überflüssige Ausführungsschritte absolvieren muss? Genau, es wird schnell quälend langsam! Insoweit sollte gerade bei Excel jedwede benutzerdefinierte Funktion immer auch leistungsoptimiert gedacht werden, und zwar insbesondere dann, wenn eine solche Funktion massenhaft verwendet werden wird, mag sie auch noch so klein sein. Leistungsoptimiertes Denken und Programmieren ist ohnehin eine Frage des sauberen Programmierstils.

Deinem Entwurf fehlt überdies die Definition des Datentyps des Rückgabewerts! Hier wäre allein "As Double" zutreffend!

Schließlich ist die Zeile
If Pause >= 0 Then Pausezeit = 0
wenig sinnhaft und weitestgehend überflüssig. Allein ein
Pausezeit = 0
ist absolut ausreichend. [Eigentlich ist auch das überflüssig, weil es eine lokal definierte Variable ist, die zunächst den Wert Null annimmt. Aber eine saubere Programmierung sorgt immer für eindeutig definierte Werte innerhalb des Programmcodes, weshalb diese verbleibende Programmzeile vorzugswürdig ist.]

Ohnehin ist Deine Variablenbezeichnung "Pause" wenig hilfreich und für ein späteres Verständnis der Funktion irreführend. Denn das, was Du damit als "Pause" bezeichnest, ist nicht die Pause, sondern die eigentliche (Brutto-)Arbeitszeit. Auch in dieser Hinsicht sollte eine Programmierung gedankliche Klarheit und das Verständnis der Aufgabenstellung erkennen lassen!

Betreffend solchem Unfug bei Zeitwerten
... Then Pausenzeit = ""
habe ich mich bereits mit meinem ersten Kommentar zu dieser Fragerunde deutlich geäußert.

Viele Grüße
HansDampf06
Blackmann
Blackmann Oct 28, 2024 updated at 08:23:40 (UTC)
Goto Top
Moin @HansDampf06

Zitat von @Blackmann:
Sollte so erst mal funktionieren und kann/sollte angepasst werden.
Ganz und gar nicht, weil grundlegende Zusammenhänge schlichtweg ignoriert werden. Oder woher nimmst Du, dass die Formel
Pause = Stundenzeit + Minutenzeit / 100
richtig sein könnte?

Du verstehst das Konstrukt nicht, Pause ist kein Zeitwert!

Ich übernehme die vollen Stunden und auch die einzelnen Minuten in die Hilfsvariable Pause, vor dem Komma die Stunden, nach dem Komma die Minuten. Pause ist keine Zeiteinheit, beinhaltet nicht die Zeit als solches.
Diese von mir konstruierte Variable lässt sich aber gut nach den Erfordernissen Prüfen.

Teste Du mal selbst mit was für Zahlen Du arbeiten müsstest, würdest Du die Zeitwerte als solche in die SDF übernehmen. Diese SDF ist allemal übersichtlicher als ein x-mal verschachteltes WENN Konstrukt.

Der TO kann sich das ja mal anschauen, ich hoffe, er versteht meinen Gedankengang und die hinterlegte Logik.

BG BM

Function Pausenzeit(ZeileD, Stundenzeit, Minutenzeit)

'Hilfskonstrukt:  Vorkomma --> Stundenanteil, Nachkomma --> Minutenanteil  
'Nur zur Entscheidungsfindung zu gebrauchen  

Hilfskonstrukt = Stundenzeit + Minutenzeit / 100

If Hilfskonstrukt>= 0 Then Pausezeit = 0
If (Hilfskonstrukt>= 6.01) And (Hilfskonstrukt<= 6.14) Then Pausenzeit = Minutenzeit
If Hilfskonstrukt>= 6.15 Then Pausenzeit = 30
If (Hilfskonstrukt>= 9.01) And (Hilfskonstrukt<= 9.14) Then Pausenzeit = Minutenzeit
If Hilfskonstrukt>= 9.15 Then Pausenzeit = 45

If ZeileD = "Arbeitsfrei" Then Pausenzeit = ""    
If ZeileD = "Feiertag" Then Pausenzeit = ""    
If ZeileD = "Fortbildung" Then Pausenzeit = ""    

End Function
HansDampf06
HansDampf06 Oct 28, 2024 at 15:57:26 (UTC)
Goto Top
Zitat von @Blackmann:
Du verstehst das Konstrukt nicht, Pause ist kein Zeitwert!
Der Witz ist echt gut, wenn ich mir Deine Berechnung für Pause ansehe:
Pause = Stundenzeit + Minutenzeit / 100
Du addierst Stunden und Minuten, die Du augenscheinlich zuvor aus einem gegebenen Wert extrahierst. Was soll das anderes sein als ein Zeitwert?

Würdest Du nämlich Dein eigenes Konstrukt und das, was Du nach Deiner Beschreibung
Ich übernehme die vollen Stunden und auch die einzelnen Minuten in die Hilfsvariable Pause, vor dem Komma die Stunden, nach dem Komma die Minuten.
zu tun gedenkst, selbst sachlich vollständig durchdringen, dann würdest Du zuerst erkennen, dass Du nun einmal einen Zeitwert, nämlich einen dezimalen Stundenwert berechnen willst. Sodann würdest Du erkennen, dass eine Stunde eben nicht 100 Minuten, sondern immer noch genau 60 Minuten hat.

Pause ist keine Zeiteinheit, beinhaltet nicht die Zeit als solches.
Das ist somit ein offenkundiger Irrglaube.

Würdest Du diese zwei Erkenntnisse gewinnen, dann würdest drittens erkennen, dass Du dann auch mit 0,5 oder 0,75 Stunden oder mit 6,25 oder 6,5 oder 9,25 rechnen könntest, was die ganze Sache vereinfachen und verständlicher machen würde. Es wäre dann vor allem sachlich zutreffend.

Nun gut, man kann natürlich wild programmieren, was man will - irgendetwas wird schon herauskommen. Aber derjenige, der eine solch wilde Programmierung verwenden muss, wird sich plötzlich wundern, wenn die Ergebnisse der Funktion ganz und gar nicht passen, weil die wilde Programmierung gelegentlich ihre Blüten treibt.

Diese von mir konstruierte Variable lässt sich aber gut nach den Erfordernissen Prüfen.
Auch das ist ein offenkundiger Irrglaube, weil dieselben Prüfungen möglich sind, wenn die Minutenzahl sachlich korrekt durch 60 dividiert werden würde. Ganz im Gegenteil stehen dann reale Bruchteile einer Stunde, die mit der Gesetzmäßigkeit, dass eine Stunde genau 60 Minuten hat, sachlich übereinstimmen, zur Verfügung. Genau das kann Dein Konstrukt nicht leisten.
Wegen dieses Mangels ist Dein Konstrukt auch nicht wirklich weiterentwicklungsfähig, wenn später zusätzliche Anforderungen hinzukommen, die auf diese Gesetzmäßigkeit abstellen (sollen).

Teste Du mal selbst mit was für Zahlen Du arbeiten müsstest, würdest Du die Zeitwerte als solche in die SDF übernehmen. Diese SDF ist allemal übersichtlicher als ein x-mal verschachteltes WENN Konstrukt.
Das ist ein wildes Argument, um sich irgendwie zu rechtfertigen. Du verkennst nämlich dreierlei:

1. Der TO hat nach der Korrektur / Überarbeitung seiner Zellenberechnung mittels der bisher verwendeten Excel-Formel nachgefragt. Dabei gibt es keine benutzerdefinierten Makro-Funktionen.
2. Wer keine benutzerdefinierten Makro-Funktionen verwendet, muss eben die Excel-Funktionen verwenden und das führt dann zwangsläufig zu einer Verschachtelung bei der Abbildung von Entscheidungsbäumen. (Wer es beherrscht, Entscheidungsbäume sauber mit Excelformeln abzubilden, für den ist ein geschachteltes WENN-Konstrukt ohnehin keine wirkliche Herausforderung und muss deswegen auch nicht in Makro-Funktionen ausweichen.)
3. Dein Makrokonstrukt macht unter dem Strich - insbesondere wenn es denn sauber und effizient programmiert wäre - auch nichts anderes, als ein geschachteltes WENN-Konstrukt abzubilden.

ich hoffe, er versteht meinen Gedankengang und die hinterlegte Logik.
Deine Gedankengänge und die von Dir angedachte Logik sind im Ausgangspunkt ja durchaus zutreffend. Nur die programmatische Umsetzung ist eher weniger gelungen. Und genau das ist meine Kritik.

Dein Entwurf krank gedanklich weiters daran, dass Du den Minutenwert als Ganzzahl zurückgeben willst. Hingegen will der TO die Pausenzeit als echten Zeitwert darstellen, wozu Dein Entwurf so nicht verwendet werden kann. Der Rückgabewert müsste IMMER nachbearbeitet werden. Was für einen Sinn soll das bei der Verwendung einer Makro-Funktion machen? Keinen!

Im Übrigen bist Du auf den Aspekt von ElseIf nicht eingegangen, was zusammen mit Deiner Formulierung
allemal übersichtlicher als ein x-mal verschachteltes WENN Konstrukt.
den Eindruck nahelegt, dass die Abbildung / Auffächerung von Entscheidungsbäumen gewisse Schwierigkeiten bereitet.

Eine effiziente und saubere Programmierung DEINES Vorschlages würde stattdessen so aussehen:
Function Pausenzeit(ByVal ZeileD as String, ByVal Stundenzeit As Long, ByVal Minutenzeit As Long) As Double

	Pausenzeit = 0
	' Die drei Stringwerte für Case könnten auch getrennt durch ein Komma mit nur einem Case verwendet werden. Das hängt davon ab, was möglicherweise in diesen Fällen unterschiedlich veranstaltet werden können soll  
	' Diese Stringwerte können natürlich um weitere Fälle ergänzt werden - siehe Spalte D beim TO  
	Select Case ZeileD
		Case "Arbeitsfrei"   
		Case "Feiertag"   
		Case "Fortbildung"  
		Case Else
			
			Dim AZ As Double

			AZ = Stundenzeit + Minutenzeit / 60
			
			'Einer expliziten Auswertung der Fälle von AZ <= 6 bedarf es nicht, weil Pausenzeit ohnehin immer Null sein würde  
			If AZ > 6 And AZ < 6.5 Then 
				' Der TO muss für seine Regelung die Werte 6.0 und 6.25 verwenden, was aber regulär falsch ist. Siehe Ausführungen zum Wertungswiderspruch.  
				Pausezeit = AZ - 6
			ElseIf AZ >= 6.5 then
				Pausenzeit = 0.5
				If AZ > 9.5 and AZ < 9.75 then
					' Der TO muss für seine Regelung die Werte 9.0 und 9.25 verwenden, was aber regulär falsch ist. Siehe Ausführungen zum Wertungswiderspruch.  
					Pausenzeit = Pausenzeit + AZ - 9.5
				Elseif AZ >= 9.75 then
					Pausenzeit = Pausenzeit + 0.25
				End If
			End If
			' Pausenzeit in einen echten Zeitwert, wie es Excel versteht, konvertieren  
			Pausezeit = Pausenzeit / 24
	
	End Select
	
End Function
Dadurch, dass diese Function einen Double-Wert zurückgibt, können auf die Rückgabewerte immer die Zellformatierungen für Zahlen und Uhrzeiten/Datum sicher angewendet werden.

Dessen ungeachtet krankt dieses Entwurfskonstrukt noch an der Fragwürdigkeit der Parameterübergabe für Stundenzeit und Minutenzeit. Warum sollen diese beiden Werte aus dem AZ-Wert der Spalte H des TO erst extrahiert werden müssen, wenn sofort mit dem AZ-Wert gerechnet werden könnte. Für den TO viel sachgerechter und einfacher verwendbar wäre daher dieser Ansatz:
Function Pausenzeit(ByVal ZeileD as String, ByVal AZ As Double) As Double

	Pausenzeit = 0
	' Die drei Stringwerte für Case könnten auch getrennt durch ein Komma mit nur einem Case verwendet werden. Das hängt davon ab, was möglicherweise in diesen Fällen unterschiedlich veranstaltet werden können soll  
	' Diese Stringwerte können natürlich um weitere Fälle ergänzt werden - siehe Spalte D beim TO  
	Select Case ZeileD
		Case "Arbeitsfrei"   
		Case "Feiertag"   
		Case "Fortbildung"  
		Case Else
			
			'Konvertierung des echten Zeitwerts von AZ in einen dezimalen Stundenwert aus Vereinfachungsgründen  
			AZ = AZ * 24
			
			'Einer expliziten Auswertung der Fälle von AZ <= 6 bedarf es nicht, weil Pausenzeit ohnehin immer Null sein würde  
			If AZ > 6 And AZ < 6.5 Then 
				' Der TO muss für seine Regelung die Werte 6.0 und 6.25 verwenden, was aber regulär falsch ist. Siehe Ausführungen zum Wertungswiderspruch.  
				Pausezeit = AZ - 6
			ElseIf AZ >= 6.5 then
				Pausenzeit = 0.5
				If AZ > 9.5 and AZ < 9.75 then
					' Der TO muss für seine Regelung die Werte 9.0 und 9.25 verwenden, was aber regulär falsch ist. Siehe Ausführungen zum Wertungswiderspruch.  
					Pausenzeit = Pausenzeit + AZ - 9.5
				Elseif AZ >= 9.75 then
					Pausenzeit = Pausenzeit + 0.25
				End If
			End If
			' Pausenzeit in einen echten Zeitwert, wie es Excel versteht, konvertieren  
			Pausezeit = Pausenzeit / 24
	
	End Select
	
End Function
zusammen mit dem Aufruf in Spalte J, z.B. in Zeile 6:
=Pausenzeit(D6;H6)
Einfacher geht es dann nicht mehr!


Viele Grüße
HansDampf06
HansDampf06
HansDampf06 Oct 29, 2024 at 01:13:57 (UTC)
Goto Top
Bei dem zweitgenannten Ansatz sah ich zum besseren Verständnis der geschachtelten if-Konstruktion - auch um an den Entwurf von @Blackmann weitestgehend angelehnt zu bleiben - von einer Leistungsoptimierung ab. Leistungsoptimiert - also eine Ergebnisermittlung mit so wenigen Bedindungen und VBA-Befehlen wie nur möglich - sähe der Vollständigkeit halber die geschachtelte if-Konstruktion dann so aus:
			'Einer expliziten Auswertung der Fälle von AZ <= 6 bedarf es nicht, weil Pausenzeit ohnehin immer Null sein würde  
			If AZ > 6 Then 
				' Der TO muss für seine Regelung die Werte 6.0 und 6.25 verwenden, was aber regulär falsch ist. Siehe Ausführungen zum Wertungswiderspruch.  
				If AZ < 6.5 Then 
					Pausezeit = AZ - 6
				Else
					Pausenzeit = 0.5
					If AZ > 9.5 then
						' Der TO muss für seine Regelung die Werte 9.0 und 9.25 verwenden, was aber regulär falsch ist. Siehe Ausführungen zum Wertungswiderspruch.  
						If AZ < 9.75 then
							Pausenzeit = Pausenzeit + AZ - 9.5
						Else
							Pausenzeit = Pausenzeit + 0.25
						End If
					End If
				End If
			End If
Wer das vorherige geschachtelte if-Konstrukt hinreichend durchdacht hat, wird zugleich erkennen können, dass diese optimierte Variante die kürzestmögliche Darstellung für den hier relevanten Entscheidungsbaum darstellt. Sie ist zudem wesentlich klarer und verständlicher. Es wird nur das an Bedindungen geprüft, was unumgänglich ist, und nie mehr als eine einzige Bedingung in derselben if-Klausel. Die vorherigen ElseIf sind zu einem schlichten Else geschrumpft.

Damit wird die Makro-Funktion dann langsam zu etwas Brauchbarem.

Viele Grüße
HansDampf06
excel-creator
excel-creator Oct 31, 2024 at 18:10:33 (UTC)
Goto Top
Hallo zusammen,
ich danke Euch allen für die vielen Gedanken und Ideen, die ich mit Spannung verfolgt habe - ebenso wie die unterschiedlichen Meinungen von Euch. Ihr habt mir mit Eurer Mühe viel Stoff zum Nachdenken und Ausprobieren gegeben. Bitte seht es mir nach, dass ich nicht immer sofort antworten kann, da die Kreation von Sonderlösungen wie dieser Stundennachweis nicht zu meinen beruflichen Hauptaufgaben gehört, und ich alles, ebenso wie Ihr, nur nebenbei in meiner Freizeit ausprobieren kann. Da ich morgens immer um 04:00 Uhr aufstehen muss und abends nicht immer früh nach Hause komme, klappt das meistens nur an den Wochenenden. Ich brauche daher etwas Zeit, um all Eure Anregungen auszuprobieren - insbesondere, da ich keine Informatikerin oder Programmiererin bin.

Dennoch würde ich gern etwas zu dem Konstrukt und deren Verwendung klarstellen, da ich sehe, dass Eure Gedanken auf eine Makro-Lösung hinauslaufen. Dieser Excel-Stundennachweis soll keine vom Betrieb zentral auf einem Server bereitgestellte Anwendung sein, die die übergeordnete Zeiterfassungssoftware ersetzen soll, sondern eine Anwendung, die von den künftigen Benutzern als privates Kontrollinstrument (z.B. auch zu Hause) parallel zu der betrieblichen elektronischen Zeiterfassungssoftware genutzt werden kann (deshalb in Excel). Dabei muss das Handling für die Benutzer so einfach wie möglich gestaltet sein, da nicht alle zukünftigen Benutzer Excel-Kenntnisse besitzen.

Bisheriger Aufbau des Konstruktes ab Spalte in der aktuellen Version:
Alle Zellen, die Zeiten auswerfen, sind in den Formaten hh:mm bzw. [h]:mm formatiert. Die Spalte C ist eine (später ausgeblendete) Hilfspalte im Format hh:mm, die verknüpft ist mit der Zelle E7 = Bild 1 (Format hh:mm). In Zelle E7 ist eine Dropdown-Liste mit den täglichen Soll-Arbeitsstunden der verschiedenen Voll- und Teilzeit-Modelle hinterlegt. Die Quelle dieser Liste liegt auf einem anderen Tabellenblatt und ist in dem Format hh:mm:ss angelegt (s. Bild 2). Wählt man aus der Dropdown-Liste seine Soll-Std. aus, ändern sich die Sollstunden in Spalte E (Format hh:mm ) entsprechend der Auswahl.

In Spalte D sind die verschiedenen „Schichten“ ebenfalls mit einer Dropdown-Liste hinterlegt. Die Auswahl der Schicht und die dort hinterlegten Wenn-Formeln steuern den jeweiligen Eintrag der Sollstunden in Spalte E. Wird in der Schichtspalte z.B. die „Schicht“ Feiertag oder ein Wochenendtag ausgewählt, dann wird durch die Auswahl dieser „Schicht“ der Sollstunden-Eintrag aus der Spalte E über die hinterlegte Wenn-Formel wieder entfernt.

Die Spalte H (Arbeitszeit) berechnet die Brutto-Arbeitszeit aus den in den Spalten F und G (Format hh:mm) eingetragenen Kommt- und Geht-Zeiten. In Zeile 40 werden hier die Gesamt-Brutto-Arbeitsstunden im Format [h]:mm vor Abzug der Pausen ausgegeben.

In Spalte I (Ist +/-) wird die Differenz zwischen Spalte H (Brutto-Arbeitszeit) und Spalte E (Soll-Stunden) ohne Pausen im Format hh:mm berechnet und wiedergegeben. In Zeile 40 werden die angesammelten Überstunden im Format [h]:mm vor Abzug der Pausen wiedergegeben.

In Spalte J wird die Pause (Format hh:mm) anhand der in Spalte H entstandenen Brutto-Arbeitsstunden berechnet, wo dann unsere Pausenregelung ins Spiel kommt (Spalten L-Q und Zeilen 2-3).

In Spalte K wird das Tagesergebnis (Tagessaldo) im Format [h]:mm ausgegeben (Brutto-Arbeitszeit minus Sollzeit minus Pause). In Zeile 40 wird der Gesamtsaldo des Monats im Format hh:mm wiedergegeben.

Bis auf das Herunterrechnen der Pause zwischen 06:01 Std. und 06:15 Std. bzw. 09:01 Std. und 09:15 Std. (s. Zeile 32) funktioniert soweit alles gut. Alle Plus- und Minus-Stunden werden richtig ausgegeben und auch der Endsaldo am Monatsende wird richtig berechnet.

Und bevor Du, lieber HansDampf06, wieder mit mir schimpfst (denn ich bin sicher, Du findest das Haar in meiner Konstrukt-Suppe):
Ja - ich weiß und habe verstanden, dass eine Verwendung von Wenn-Formeln, in der sowohl Text- als auch Zeitwerte kombiniert sind, für die Zeitenberechnung in Excel höchst ungünstig ist, und es besser wäre, beides zu trennen. Da das aber bei diesem Konstruktaufbau nicht möglich ist, suche ich noch nach einer Lösung, aber immer mit Blick auf den oben angegebenen zukünftigen Benutzerkreis und deren Anwendungsort.

Sollte es jedoch keine integrierbare Excel-Lösung für dieses Konstrukt geben, habe ich im Grunde nur noch 2 Möglichkeiten: Entweder verzichte ich auf das Herunterrechnen der Pausen oder ich baue ein ganz neues Konstrukt.

So - das war jetzt ein sehr langer Beitrag und die Geister klingeln schon wieder an der Tür 😒.

Viele liebe Grüße und lasst Euch von den Geistern heute Nacht nicht ärgern 😊

Astrid
excel-creator
Solution excel-creator Nov 03, 2024 at 18:15:48 (UTC)
Goto Top
Guten Abend zusammen,

ich habe es geschafft 😊
Das Problem mit den Diensten nach 0:00 Uhr konnte ich mit dem Vorschlag von TA vom 26.10.2024 lösen, indem ich bei der Endzeit +24 hinzugefügt habe. Vielen Dank TA 😊

Das Problem mit dem Herunterrechnen der Pausen konnte ich mit meinem Formel-Konstrukt, wie HansDampf06 schon gleich am Anfang richtig festgestellt hatte, nicht lösen.

Da ich mit den anderen Vorschlägen auch nicht weitergekommen bin und auch kein Makro programmieren kann, habe ich den anfänglichen Vorschlag von HansDampf06, über Hilfsspalten zu gehen, noch einmal aufgegriffen und ihn in abgewandelter Form angewandt.

Anstatt die Pausen im Minutentakt herunterrechnen zu wollen, habe ich jetzt eine Hilfsspalte eingerichtet, mit der nun der Minutenanteil, der zu viel von der Pause abgezogenen wurde, dem Zeit-Konto wieder gutgeschrieben wird.

Das ist zwar keine sehr elegante Lösung, insbesondere im Vergleich zu einem Makro, aber es löst nun endlich mein Problem, das, wie ich mir inzwischen habe sagen lassen, in der Praxis eher selten vorkommt. Vielen Dank HansDampf06 😊

Viele Grüße
Astrid