Clever-Excel-Forum

Normale Version: "Dynamischer" - Schichtplan
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,


ich habe eine Frage zu einem Schichtplan.
(Datei im Anhang)

Der Reiter "Schichteinteilung" soll  Prozesse etc. darstellen und die entsprechenden Mitarbeiter die den Prozessen zugeteilt wurden.
Der Reiter "Mitarbeiterqualifikationen" ist dafür da, die Qualifikationen der Mitarbeiter "zuweisen" zu können.
Man kann also feststellen, welcher Mitarbeiter bei wievielen Prozessen eingesetzt werden kann.
(z.B. beim Reiter "Schichtleitung" Zelle C4 anklicken>Daten>Datenüberprüfung>Liste>Mitarbeiter beim Reiter "Mitarbeiterqualifikationen"  bei Prozess A markieren>OK)
Danach hat man quasi in der Zelle C4 (Reiter "Schichteinteilung") Mitarbeiter-Namen in einem Dropdown Menu die für den Prozess qualifiziert sind.

Frage:
Wie kann man ein Mitarbeiter-Name sobald er das zweite mal von einer anderen Zelle ausgewählt wurde, automatisch aus der Zelle davor entfernen?
So dass ein Mitarbeiter nur in einem Prozess sein kann und nicht in zwei oder mehreren?

Beispiel:
Gelb markierte Zellen: C4 & F7.
C4 "Schiller" wechseln zu "Groß"
Zelle F7 mit "Groß" wird gelöscht/zurückgesetzt. Da der Name nur einmal vorkommen darf.


Ich hoffe ich habe mich verständlich ausgedrückt. Leider habe ich keinen Ansatzpunkt, bin aber für alle Vorschläge offen.

Danke![attachment=27225]
Hallöchen,

dafür sind zwei Ansätze vorstellbar.
1) Für ein automatisches Entfernen wäre eine Makrolösung erforderlich.
2) Nutze die bedingte Formatierung und markiere damit die Zellen mit den Name die mehr als einmal auftreten.

Hinweis / Frage:
Was machst Du, wenn Du irgendwann zwei Mitarbeiter Max Mustermann hast?
(26.10.2019, 16:34)schauan schrieb: [ -> ]Hallöchen,

Hinweis / Frage:
Was machst Du, wenn Du irgendwann zwei Mitarbeiter Max Mustermann hast?

Dann geht es vielleicht mit der Bundestagslösung:

Müller Lüdenscheid :19:

bzw

Mustermann Berlin  :41:
Hallo schauan,

der 2. Vorschlag von dir bezieht sich auf das Markieren der Zelle. Ich möchte aber den Eintrag der "ersten" Zelle löschen, sobald eine neue Zelle mit dem gleichen Namen der "ersten" Zelle bestückt wurde.
Ist der Name in der Tabelle einmal vorhanden, ist es ok. Sobald ein Name einem Prozess neu zugeordnet wird, dieser aber bereits in einer anderen Zelle vorhanden ist, soll die Zelle in der der Name davor vorhanden war, leer werden.

Zum 1. Vorschlag, wie würdest du das aufbauen? Hättest du da ein Beispiel?

Danke für deine Vorschläge, ich habe das Internet dazu durchforstet, aber leider nichts dazu gefunden.
Hallöchen,

Das makro könnte so aussehen. Es gehört in das Codemodul vom Tabellenblatt, wo es wirken soll.

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'Wenn was im Bereich F4:F9 passiert, dann
If Not Intersect(Target, Range("F4:F9")) Is Nothing Then
  'Wenn mehr als eine Zelle geaendert wird oder eine Zelle geloescht wird,
  'dann Makro verlassen
  'Hinweis: ich gehe davon aus, dass der Anwender nicht zwei oder mehr Namen
  'aus C4:C16 kopiert und einfuegt ...
  If Target.Cells.Count > 1 Or Target.Value = "" Then Exit Sub
  'Bei Fehler weiter im Makro
  On Error Resume Next
  'Name in C3:C16 suchen und entfernen
  Range("C3:C16").Find(What:=Target.Value, After:=Cells(3, 3), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).ClearContents
'Ende Wenn was im Bereich F4:F9 passiert, dann
End If
End Sub
Hallo schauan,

vielen Dank für den Einstieg!

Leider hat dein Code nur auf der linken Tabelle funktioniert, die rechte Tabelle hat da nicht mitgespielt.
Aber auf dieser Basis konnte ich mit Hilfe eines Kollegen den Code "erweitern".

Der Code wurde im Reiter "Schichteinteilung" eingefügt.

----------------------------------------------------------------------------------------------------------------------------------------------

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If (Not Intersect(Target, Range("F4:F9")) Is Nothing) Or (Not Intersect(Target, Range("C4:C16")) Is Nothing) Then

  If Target.Cells.Count > 1 Or Target.Value = "" Then Exit Sub

  On Error Resume Next

  If Target.Column = 6 Then
  Range("C3:C16").Find(What:=Target.Value, After:=Cells(3, 3), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).ClearContents
  End If
  If Target.Column = 3 Then
  Range("F3:F9").Find(What:=Target.Value, After:=Cells(3, 6), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).ClearContents
  End If

End If
End Sub

---------------------------------------------------------------------------------------------------------------------------------------------

Wenn man diesen Code in der Datei einfügt (im Reiter Schichteinteilung), geht es auf beiden Tabellen.

Vielen Dank nochmal!