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
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
Please also mark the comments that contributed to the solution of the article
Content-ID: 669053
Url: https://administrator.de/contentid/669053
Printed on: November 13, 2024 at 11:11 o'clock
19 Comments
Latest comment
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
Aber: seit 2022 gibt es doch Erfassungspflichten, die das erübrigen sollten?
https://www.google.com/search?q=zeiterfassung+pflicht
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 🤪)
... 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
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
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:
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
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))
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
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!Die Buchungen der Mitarbeiter/Kollegen führen hier immer wieder zu falschen Auswertungen, bei denen dann statt eigentlich 5 Überstunden 22 Minusstunden herauskommen.
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
Moin,
du könntest zur für die Pausenabzüge die "Zeit"-Formel verwenden (Format =ZEIT(Stunden;Minuten;Sekunden), beispielweise
Erläuterung:
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):
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?
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):
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?
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.
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
§ 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
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
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.Eventuell muss dieser Umstand (bspw. mit einer Spalte für abweichende Zeiten) abgefangen werden.
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
N'Abend,
halte mich mal an Deine Vorgaben ganz oben.
Ich würde das Problem mit einer Selbstdefinierten Funktion 'Pausenzeit' lösen:
Argument1: Schichtzelle
Argument2: Stundenanteil Pausenzeit
Argument3: Minutenanteil Pausenzeit
Im Modul zum Blatt dann die Function integrieren:
- 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
halte mich mal an Deine Vorgaben ganz oben.
Ich würde das Problem mit einer Selbstdefinierten Funktion 'Pausenzeit' lösen:
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
Ganz und gar nicht, weil grundlegende Zusammenhänge schlichtweg ignoriert werden. Oder woher nimmst Du, dass die Formel
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:
Ü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
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
Viele Grüße
HansDampf06
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 einPausezeit = 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
Moin @HansDampf06
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
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?
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
Der Witz ist echt gut, wenn ich mir Deine Berechnung für Pause ansehe:
Würdest Du nämlich Dein eigenes Konstrukt und das, was Du nach Deiner Beschreibung
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.
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).
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.
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
Eine effiziente und saubere Programmierung DEINES Vorschlages würde stattdessen so aussehen:
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:
zusammen mit dem Aufruf in Spalte J, z.B. in Zeile 6:
Einfacher geht es dann nicht mehr!
Viele Grüße
HansDampf06
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
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
=Pausenzeit(D6;H6)
Viele Grüße
HansDampf06
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:
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
'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
Damit wird die Makro-Funktion dann langsam zu etwas Brauchbarem.
Viele Grüße
HansDampf06