Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mitarbeiterübersicht anhand Schichtplan

Mitarbeiterübersicht anhand Schichtplan
16.02.2023 08:54:56
Anika
Hallo zusammen,
ich komme leider nicht zum richtigen Ergebnis mit den Formeln INDEX, VERGLEICH und SVERWEIS. Vielleicht kann mir hier jemand helfen.
Anbei die Beispieldatei:
https://www.herber.de/bbs/user/157853.xlsx
Im Reiter 1 ist die Schichtplanung zu finden. Im Reiter 2 die Übersicht, die ich aus dem Reiter 1 generiert haben möchte.
Ich hätte im Ziel gern eine Übersicht je Tag und je Schicht auf Namensbasis. F=Frühschicht, T=Tagschicht, S=Spätschicht, N=Nachtschicht, K=Krank, U=Urlaub, ÜA=Überstundenabbau, A=Anwesend.
Sobald ein A eingetragen ist, soll der Mitarbeiter zur richtigen Schicht am richtigen Tag zugeordnet werden.
Danke für eure Hilfe.
VG

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: hast offensichtlich kein XL2003 ...
16.02.2023 09:17:54
neopa
Hallo Anika,
... denn XL2003 kann noch keine XLSX-Datei ausgeben. Und Deine Datenstruktur (verbundene Zellen) ist auch nicht optimal aber trotzdem auswertbar. Ich gehe nachfolgend davon aus, dass Du zumindest XL2010 im Einsatz hast.
Folgende Formel in C7:
=WENNFEHLER(INDEX(Tabelle1!$B:$B;AGGREGAT(15;6;ZEILE(Tabelle1!M$7:M$13)/(Tabelle1!$M$5:$DM$5=VERWEIS(9^9;$C$5:$DM$5))/(Tabelle1!$M$7:$DM$13=C$6);ZEILE(A1)));"") und diese ziehend nach unten und rechts kopieren.
Gruß Werner
.. , - ...
AW: hast offensichtlich kein XL2003 ...
16.02.2023 12:46:12
Anika
Hi Werner,
danke für deine Hilfe. Die Formel hat funktioniert. Um die richtig zu verstehen, habe ich noch ein paar Rückfragen.
1. Was bedeutet das 9^9 in der Formel VERWEIS?
2. Kann ich die Zelle A1 festsetzen mit den Dollarzeichen oder ist das egal?
3. Kann die Formel mit dem Datum in Zelle C5 im Reiter 2 verknüpft werden, sodass sich die Namen der Mitarbeiter anpassen, sobald ich das Datum dort ändere?
Danke für dein Feedback.
Anzeige
AW: zu Deinen drei Nachfragen ...
16.02.2023 17:15:54
neopa
Hallo Anika,
... und zwar:
1.) mit 9^9 erzeuge ich lediglich eine sehr große Zahl, von der ich mir ganz sicher bin, dass diese größer ist als die Zahl des max Datumswertes, der auszuwerten ist.
2.) Zelle A1 kommt in meiner Formel nicht vor sondern nur ZEILE(A1) und da darf vor der 1 kein $ gesetzt werden, denn =ZEILE(A1) ergibt nach unten kopiert beginnend mit 1 eine 2, dann 3 ... ist also ein Zähler für die Ergebniswerte.
3.) die Formel muss ich dazu an einer Stelle korrigieren zu:
=WENNFEHLER(INDEX(Tabelle1!$B:$B;AGGREGAT(15;6;ZEILE(Tabelle1!M$7:M$13) /(Tabelle1!$M$5:$DM$5=VERWEIS(9^9;$C$5:D$5))/(Tabelle1!$M$7:$DM$13=C$6);ZEILE(A1)));"")
(vergleiche fett gedruckt dargestelltes mit der zuvor eingestellten Formel; diese Formel dann nach rechts und unten ziehend kopieren) Damit sollte dann auch Deine diesbzgl. Frage beantwortet sein.
Gruß Werner
.. , - ...
Anzeige
AW: eine Korrektur der Korrektur ...
17.02.2023 07:28:10
neopa
Hallo Anika,
... nach Lesen des letzten Beitrages von Yal, habe ich mehr zufällig noch mal meinen letzten Beitrag angesehen. Dabei fiel mir ins Auge, dass mir bei meiner gestrigen Korrektur meiner Formel ein Fehler unterlaufen ist. Anstelle ... $C$5:D$5)... muss der Formelteil in C7 korrekt natürlich wie folgt lautem: $C$5:C$5)...
Außerdem hatte ich gestern vergessen nachzufragen, ob und wenn ja sich Deine Angaben "K" und "U" in den Quelldaten auf die Ergebnisdarstellung auswirken soll 8bisher nicht). In der von Yal vorgeschlagenen Pivotierung der geänderten Datenbasis wäre das einfach und schnell erledigt. In meiner Formellösung für Deine bereitgestellte Datenstruktur bedürfte es auch nur einer Formelerweiterung. Nach entsprechende Klärung Deinerseits, könnte ich jedoch wahrscheinlich erst am späteren Nachmittag reagieren.
Gruß Werner
.. , - ...
Anzeige
AW: eine Korrektur der Korrektur ...
17.02.2023 10:07:33
Anika
Hallo Werner,
danke für deine Mühe. Die Formel funktioniert einwandfrei. Normalerweise haben "K" und "U" einen Einfluss, dann sollten die Mitarbeiter nicht in der Zielübersicht auftauchen. Ich hätte es manuell geregelt, aber wenn deine Formel "nur" erweitert werden muss, wäre ich dir hier auch sehr dankbar.
AW: die dazu notwendige Formelerweiterung
17.02.2023 12:01:49
neopa
Hallo Anika,
... ist mit einer Bedingungsprüfung zu realisieren.
Also normalerweise würde die bereits aufgezeigte Formel für die KW3 angepasst in C16 wie folgt aussehen:
=WENNFEHLER(INDEX(Tabelle1!$B:$B;AGGREGAT(15;6;ZEILE(Tabelle1!M$7:M$13)/(Tabelle1!$M$5:$DM$5=VERWEIS(9^9;$C$14:C$14))/(Tabelle1!$M$7:$DM$13=C$15)/(Tabelle1!$O$7:$DM$13="A");ZEILE(A1)));"")
Um nur die Mitarbeiter mit "A" zu listen dann folgende Erweiterung:
=WENNFEHLER(INDEX(Tabelle1!$B:$B;AGGREGAT(15;6;ZEILE(Tabelle1!M$7:M$13) /(Tabelle1!$M$5:$DM$5=VERWEIS(9^9;$C$14:C$14))/(Tabelle1!$M$7:$DM$13=C$15) /(Tabelle1!$O$7:$DM$13="A");ZEILE(A1)));"")
Gruß Werner
.. , - ...
Anzeige
AW: Mitarbeiterübersicht anhand Schichtplan
16.02.2023 11:54:19
Yal
Hallo Anika,
wie Werner/Neopa es sagt, sind verbundene Zelle nicht nur "nicht optimal", es ist eine Krankheit: entweder will man Daten effizient verwalten, oder diese schön aussehen lassen. Wenn man ersteres anstrebt, kann man nach dem leicht und schnell Auswerten immer noch ein Bischen Schönheit reinfliessen lassen. Umgekehrt ist es zwischen sehr kompliziert und unmöglich.
Mein Vorschlag: lege deine Daten in 4 Spalten: Datum , Mitarbeiter, Schicht, Anwesenheitsstatus
Mit Datenüberprüfung (Menü "Daten", "Datenüberprüfung") kannst Du Auswahliste für Mitarbeiter, Schicht und Status vorbelegen.
Dann musst Du nur noch eine Pivottabelle anlegen (Rechtsklick, Aktualisieren), und schon hast Du deine Daten in jegliche mögliche Kombination von was in Spalten-, Zeilenüberschrift oder Filter. Keine Formel + kein VBA = kein Stress.
Es trifft nicht deine Anforderung zu 100%, ist aber sehr schlank und effizient.
Siehe Tabelle4
https://www.herber.de/bbs/user/157857.xlsx
VG
Yal
Anzeige
AW: Mitarbeiterübersicht anhand Schichtplan
16.02.2023 12:41:38
Anika
Hi Yal, Danke für deine Rückmeldung. Leider ist die Tabelle und deren Formatierung mit den verbundenen Zellen seitens der Zentrale so vorgegeben. Aber ich gebe dir Recht, schön ist es nicht. Mit Pivot kenne ich mich etwas aus, deinen Vorschlag werde ich mir als Backup behalten.
Danke.
VG
AW: Mitarbeiterübersicht anhand Schichtplan
16.02.2023 12:53:09
Yal
Hallo Anika,
Du meinst, die Quelle ist vorgegeben, aber auf das Ziel könntest Du noch "einwirken"?
Es wäre aber bei der "Zentrale" zu hinterfragen, ob es eine Alternative bei der Quelle gibt. Es ist nicht selten, dass man eine Antwort à la "wir haben immer so gemacht, aber wenn anders für Sie besser ist, geht klar" bekommt.
Sonst, wenn die Formatierung der Quelle stabil ist, kann man eine VBA-Makro verwenden, um die Daten zu extrahieren und in Spalten zu überführen. Dann Pivot.
Man könnte auch fragen, wenn schon Makro, warum dann nicht direkt ins Zielformat? Die Überführung ins Zielformat an sich ist auch nicht ohne. Wenn ich es per Makro machen würde, würde ich sowieso zuerst eine "Datensammeln" in eine klaren Datenstruktur, dann aus der Datenstruktur ins Zielformat. Es erleichert zukünftige Änderungen, sowohl Quell- als Zielseitig.
Ich stelle den Marker "Frage noch offen". Vielleicht habe ich heute Abend Zeit dafür. Vielleicht wird jemand anderen schneller sein.
VG
Yal
Anzeige
Entpivotierung ohne Power Query
16.02.2023 21:06:55
Yal
Hallo Anika,
Diese Beitrag hat eine geringe Relevanz, da Du eine funktionierende Formel von Werner bekommen hast, die deine Bedarf abdeckt.
Da ich aber den Spass hatte, diese Nuss zu knacken, und weil vielleicht doch irgendwann jemand änhliches per VBA möchte, eine VBA-Lösung.
(Entpivotieren per VBA habe ich, seit ich Power Query kenne, nicht mehr gemacht. Aber die Quelle war ...schwierig)
Dim Arr()
        
Sub Entpivotieren()
    Daten_Lesen
'Information Tabellerisch ausgeben (geht einfach)
    Worksheets.Add.Range("A1").Resize(UBound(Arr, 2) + 1, 4) = Application.Transpose(Arr)
'Daten nach Vorgabe ablegen (geht schwieriger)
    DatenNachVorgabe_ablegen
End Sub
Sub Daten_Lesen()
Dim R As Long 'Row
Dim C As Long 'Column
Dim j As Long
Const cEZ = 7 'erste Datenzeile
Const cES = 13 'erste Datenspalte "M" (= Spalte 13)
    ReDim Arr(3, 0)
    Arr(0, 0) = "Mitarbeiter"
    Arr(1, 0) = "Datum"
    Arr(2, 0) = "Schicht"
    Arr(3, 0) = "Anwesenheit"
'Information sammeln (passiert in der ActiveSheet oder im Blatt, wo diese code abgelegt ist
    For R = cEZ To Cells(Rows.Count, "B").End(xlUp).Row
        For C = cES To Cells(R, Columns.Count).End(xlToLeft).Column Step 3
            If Cells(R, C) > "" Then
                j = j + 1
                ReDim Preserve Arr(3, j)
                Arr(0, j) = Cells(R, "B").Value 'Mitarbeiter
                Arr(1, j) = CDate(Cells(5, C).Value) 'Datum
                Arr(2, j) = UCase(Trim(Cells(R, C).Value)) 'Schicht
                Arr(3, j) = UCase(Trim(Cells(R, C + 2).Value)) 'Anwesenheit. Es gibt einen eintrag mit einem leerzeichen davor :-)
            End If
        Next
    Next
End Sub
Sub DatenNachVorgabe_ablegen()
Dim R As Long 'Row
Dim C As Long 'Column
Dim j As Long
Dim Versatz As Long
Const cEZ = 5 'erste Abgabezeile
Const cES = 3 'erste Abgabespalte "C" (=3)
    Application.ScreenUpdating = False
    Application.EnableEvents = False
'Information "as expected" ausgeben
    With Worksheets.Add
        For j = 1 To UBound(Arr, 2)
            R = WorksheetFunction.WeekNum(Arr(1, j)) * 9 + cEZ - 9 'Wochenzeile
            C = WorksheetFunction.Weekday(Arr(1, j), 2) * 5 + cES - 5  'Tagesspalte
            .Cells(R, C) = Arr(1, j) 'Datum
            .Cells(R + 1, C).Resize(1, 4) = Array("F", "T", "S", "N") 'wichtig wg End(xlup)
            If Arr(3, j) = "A" Then 'nur bei nicht krank, nicht Urlaub
                Select Case Arr(2, j)
                Case "F": Versatz = 0
                Case "T": Versatz = 1
                Case "S": Versatz = 2
                Case "N": Versatz = 3
                End Select
                .Cells(R, C).Offset(8, Versatz).End(xlUp).Offset(1, 0) = Arr(0, j)
            End If
        Next
    End With
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
Daten sammeln geht eigentlich relativ leicht.
Tabellerisch abgeben ist nur eine Zeile.
Nach vogegebene Format ist, wie vermutet, anstregender. Ich habe auf Formatierung verzichtet (Zellefarbe und Text zentriert über Spalten). Es lässt sich leicht hinzufügen.
VG
Yal
Anzeige
AW: Entpivotierung ohne Power Query
17.02.2023 10:14:35
Anika
Hallo Yal,
vielen Dank für deine Mühe. Über die Formel von Werner war mein Problem erstmal gelöst. Ich werde mir dennoch dein Makro gern näher anschauen, da die Schichtleiter gern auch mal eine Formel löschen, wenn kein Blattschutz eingestellt ist :-D da wäre ich mit einem Makro auf der sicheren Seite. Eine kurze Rückfrage: Muss ich einen BUtton für das Makro einbauen oder aktualisiert Excel es automatisch, wenn die Datei geöffnet ist?
Danke.
VG
Anika
AW: Entpivotierung ohne Power Query
17.02.2023 10:55:11
Yal
Hallo Anika,
mit Alt+F8 bekommst Du den Makro-Auswahl. Das Makro wirkt immer auf das gerade aktives Blatt.
Du musst das Makro in einem Modul ablegen. Wenn es immer dieselbe Datei ist, dann in diese Datei, wenn nicht in einem separaten Datei, die auch geöffnet sein muss um das Makro verfügbar zu machen.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige