Mit Bed. Form. prüfen, ob alle Minuten abgedeckt sind
#11
Hallo,

mein 1. Versuch nutzt =WENNS(). Da kann es sein, dass diese Funktion in O2010 noch nicht dabei ist.
Deshalb noch eine Lösung via UDF.

Was im Umgang mit der UDF zu beachten ist steht im Textfeld.
Da gab es vom TO die Info, dass es mehr aus 2 Mitarbeiter gibt. Zu diesem Zweck hat die UDF zwei Parameter.

.xlsm   Beispiel ohne Formeln.xlsm (Größe: 21,98 KB / Downloads: 10)

Gruß Uwe
Antworten Top
#12
Hi, früher war ich das, danke. Ich hatte sogar schon mal einen Code bekommen. Aber leider laufen Makros bei uns nicht mehr.
Antworten Top
#13
Vielen lieben Dank an alle für eure Mühe!!!

Und ein Sorry, dass ich mich jetzt erst wieder melde.

Deine Lösung Uwe, funktioniert, bläht die Datei aber enorm auf. Etwas weniger, wenn man einen 5-Minuten-Abstand wählt. Das funktioniert auch dann, wenn man z.B. "10:33" eingibt.

Anton, wenn du ein bisschen herumspielst und sowas bei rauskommt, will ich mal sehen, wie das ist, wenn du mal richtig anfängst! Ich musste erst nach "LAMBDA" googeln. Ich habe die neueste Excel-Version und auf der Arbeit arbeiten wir mit Office 365.

Leider hängen die Spalten nicht zusammen, da zwischen den Arbeitszeitzellen der einzelnen Mitarbeiter ja noch die Berechnungszellen sind. Und mit mehreren Bereichen hat LAMBDA wohl ein Problem. Laut ChatGPT gibt es dafür die Funktion "UNION". Die funktioniert bei mir aber nicht. Oder ChatGPT und ich machen was falsch.

Eigentlich haben wir eine Dienstabdeckung von 24/7. Je nachdem, wie die Kids Schule haben,  schreibe ich in den Dienstplan eine "Pause", z.B. von 10 - 12.  Daher habe ich Kernzeiten definiert, damit man an den grünen Testzellen auch in solchen Fällen sehen kann, dass die Bedingung "Dienste abgedeckt" erfüllt ist. Besser ist natürlich eine Lösung, die flexibel ist. Also habe ich in deine Formel "7:00 - 24:00" geschrieben. 0:00 - 7:00 haben wir NB (Nachtbereitschaft), schlafen also in der Gruppe, das zählt aber nicht als Dienst und wird im Dienstplan zwar abgebildet, aber nicht in den Arbeitszeitzellen.

Noch geiler wäre es natürlich, wenn nicht die zusammenhängenden Zeiten extrahiert werden, sondern die Lücken. Das würde alle Variationen (mit und ohne Pause) auf einmal abdecken.

Jetzt habe ich mal die anonymisierte Originaldatei angehängt. Natürlich sind Arbeitsmappenstruktur und Sheets normalerweise geschützt.

Gruß
Uwe


Angehängte Dateien
.xlsx   DP_AZA CEF.xlsx (Größe: 165,01 KB / Downloads: 16)
Antworten Top
#14
Hallo,

Zitat:Leider hängen die Spalten nicht zusammen, da zwischen den Arbeitszeitzellen der einzelnen Mitarbeiter ja noch die Berechnungszellen sind. Und mit mehreren Bereichen hat LAMBDA wohl ein Problem. Laut ChatGPT gibt es dafür die Funktion "UNION". Die funktioniert bei mir aber nicht. Oder ChatGPT und ich machen was falsch.
da hast du wohl nicht genau genug recherchiert. Die Funktion UNION bzw. ihre Verwandte INTERSECT gibt es nur als VBA-Funktion und nicht als Arbeitsblattfunktion.

Als Arbeitsblattfunktion muss man dazu HSTAPELN(Bereich1;Bereich2;...) verwenden: Diese Funktion stapelt mehrere Bereiche, die gleich viel Zeilen haben müssen, nebeneinander (H=Horizontal), während VSTAPELN(...) das gleiche vertikal (V=Vertikal) macht.

Im Arbeitsblatt "DP|AZA" habe ich dir in Zelle AO5 die entsprechend angepasste Formel eingefügt:
Code:
=NACHZEILE(
    ABSCHNBEREICH(
        HSTAPELN(
            $D$5:$G$35;
            $J$5:$M$35;
            $P$5:$S$35;
            $V$5:$Y$35;
            $AB$5:$AE$35;
            $AH$5:$AK$35
        );
        2;
        0
    );
    LAMBDA(zl; MA_Dienstzeiten(zl))
)
Dabei habe ich die 6 Bereiche (mit ihren Zeilen 5:35) horizontal gestapelt. 
Darüber hinaus habe ich die HSTAPELN()-Funktion zusätzlich in die ABSCHNBEREICH(Bereich; 2; 0)-Funktion eingebettet. Diese bewirkt mit ihren Parametern 2;0 , dass der Stapelungsbereich (zuerst unten endend in Zeile 35) solange nach oben verkleinert wird, bis im Bereich die ersten Zellen auftauchen, die Daten enthalten. Im aktuellen Arbeitsblatt ist das Zeile 9 (statt Zeile 35).
Das hat zur Folge, dass der Resultatbereich für obige Funktion momentan im Bereich AO5:AO9 zu liegen kommt.
Gibst du in einem der 6 MA-Bereiche zB. in Zeile 10 Arbeitszeitdaten ein, vergrößert sich der Resultatbereich automatisch auf AO5:AO10.

In Zelle AP5 habe ich die leicht modifizierte Funktion
=NACHZEILE(AO5#; LAMBDA(zl;KernzeitLückenlos(zl;$AP$2)))
eingefügt. Sie greift wegen AO5# auf den vorhin genannten Resultatbereich zu, wobei ich in Zelle AP2 die Zeichenkette für die Kernzeit (07:00-09:00, 13:00-00:00) eingefügt habe. Sie überprüft pro Zeile, ob dieser Zeitraum durch die Arbeitszeiten der MA lückenlos (=WAHR) abgedeckt wird (sonst FALSCH).

Zitat:Noch geiler wäre es natürlich, wenn nicht die zusammenhängenden Zeiten extrahiert werden, sondern die Lücken. Das würde alle Variationen (mit und ohne Pause) auf einmal abdecken.
Deshalb habe ich in Zelle AQ5 folgende zusätzliche Formel eingefügt:
=NACHZEILE(AO5#; LAMBDA(zl; MA_DienstzeitLücken(zl)))
Wie vorhin greift auch diese Formel auf den Resultatbereich AO5# der ersten Formel zu und gibt die nicht durch Arbeitszeiten abgedeckten Zeiten eines Tages zurück.

Die genannten Funktionen befinden sich alle im Namensmanager und dürfen von dort nicht entfernt werden (zusammen mit einer weiteren Hilfsfunktion VonBis(txtVB), die eine Zeichenkette in Von-Bis-Intervalle zerlegt und so eine 2-spaltige Matrix erzeugt):
Code:
VonBis = LAMBDA(txtVB; LET(
    tx24vb; REGEXERSETZEN(txtVB; "00:00$"; "24:00");
    --TEXTTEILEN(tx24vb; "-"; ", "))
);;


Angehängte Dateien
.xlsx   CaptainNemo_DP_AZA CEF.xlsx (Größe: 175,14 KB / Downloads: 11)
Gruß Anton.

Windows 10 64bit
Office365 32bit
Antworten Top
#15
Hi Anton,

nachdem ich, außer ein paar kleinen Änderungen, auch Spalten für "geplante Lücken" hinter der Tabelle eingefügt habe (auf einfache Ideen, die ich auch selbst umsetzen kann, muss ich immer erstmal kommen), habe ich deine Formeln angepasst und erfolgreich getestet. Ein Wermutstropfen bleibt: Ich habe übersehen, dass Buchstaben ignoriert werden müssen, z.B. "U" für Urlaub, "K" für krank oder "F" für frei und noch ein paar andere. Die kann man in jeder ersten Mitarbeiter-Spalte eintragen. Bei "U" und "K" gibt die Formel in der Stunden-Spalte den Wert zurück, der oberhalb des Mitarbeiters eingetragen wurde.

Aber trotzdem bleibt ein erheblicher Fortschritt.

Danke für deine Bemühungen.

Gruß
Uwe
Antworten Top
#16
Hallo,

Zitat:Ich habe übersehen, dass Buchstaben ignoriert werden müssen, z.B. "U" für Urlaub, "K" für krank oder "F" für frei und noch ein paar andere. Die kann man in jeder ersten Mitarbeiter-Spalte eintragen. Bei "U" und "K" gibt die Formel in der Stunden-Spalte den Wert zurück, der oberhalb des Mitarbeiters eingetragen wurde.
ich habe dazu in der Funktion "MA_Dienstzeiten" eine FILTER-Funktion eingefügt. Diese bewirkt, dass alle Von-Bis-Spalteninhalte ausgeschieden werden, die in der Von-Spalte statt einer Zahl (für die Uhrzeit) Text enthalten (zB. "U" oder "F" oder was sonst).
Als Beispiel habe ich dir im Arbeitsblatt "DP|AZA" in Zeile 6 in den Zellen D6 bzw. J6 ein "U" bzw. "K" eingefügt - die jeweils zweite Von-Bis-Angabe ist davon nicht betroffen, weil dort in der Von-Spalte eine Zahl (die Uhrzeit) enthalten ist.


Angehängte Dateien
.xlsx   CaptainNemo_DP_AZA CEF.xlsx (Größe: 175,14 KB / Downloads: 6)
Gruß Anton.

Windows 10 64bit
Office365 32bit
Antworten Top
#17
Hi Anton,

die Datei ist identisch mit der ersten.

Gruß
Uwe
Antworten Top
#18
Hallo,

tut mir leid - ich habe die falsche gespeicherte Dateiversion hochgeladen.
Jetzt aber müsste es die geänderte Version sein.


Angehängte Dateien
.xlsx   CaptainNemo_DP_AZA CEF.xlsx (Größe: 174,98 KB / Downloads: 11)
Gruß Anton.

Windows 10 64bit
Office365 32bit
Antworten Top
#19
Fantastisch!!!

Vielen Dank nochmal!

Gruß
Uwe
Antworten Top
#20
Hallo.

Weil ich natürlich wie ein Untoter keine Ruhe finde, habe ich die ganze Zeit überlegt, wie ich es schaffe, wenn Praktikantinnen, Azubis oder Studenten, die mit den Jugendlichen nicht allein sein dürfen, im Dienstplan eingepflegt sind, zu überprüfen, ob auch dann die Zeiten abgedeckt sind, wenn ich deren Dienste rausnehme. Heute ist mir eine VBA-Lösung eingefallen mit zwei Codes, die ich auf zwei Buttons gelegt habe: Einer löscht alle ausgegrauten Zeiten, um sie nach 4 Sekunden wieder in die Zellen zu schreiben. Vielleicht ändere ich das noch, dass man in einer MsgBox auf "OK" klicken muss, damit sich die Zeiten wieder reinschreiben. In der Zeit kann man sehen, ob der Tag abgedeckt ist. Der andere Code bzw. Button ist nicht wirklich notwendig, aber bequem und vor allem für ungeübte User. Er formatiert in ausgewählten Zellen die Schriftfarbe um: Schwarz in Grau und umgekehrt.

Gruß
Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste