Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Zellinhalte über Schleife zuordnen

Betrifft: Zellinhalte über Schleife zuordnen von: Klara
Geschrieben am: 17.09.2020 11:03:49

Hallo ihr Lieben,

ihr habt mir in der Vergangenheit immer extrem weiter geholfen, danke dafür!
Nun habe ich ein neues Problem und hoffe ihr könnt mir weiterhelfen.

Ich habe eine Tabelle, welche die Mitarbeiter nach Qualifikation und Anwesenheit auf ihre Arbeitsplätze verteilt, das funktioniert schon super gut. Aktuell wird die Person einfach entsprechend ihrer Anwesenheit komplett auf die Woche verplant ohne zu beachten wie viele Schicht eigentlich geplant sind.

Gibt es eine Möglichkeit, dass während die Personen verplant werden die Anzahl der Schichten mitberücksichtigt wird?

Sind z.B. 15 Schichten oder weniger geplant ist die erste Schicht Montag Früh. Ab 16 Schichten ist die erste Schicht Sonntag Nacht. Mein Code sieht im Moment so aus:

Sub Woche()

  Dim a As Long, b As Long, i As Long, j As Long, Wert
  Dim objMA As Object, oObj
  Set objMA = CreateObject("scripting.dictionary")
  
  'Mitarbeiter sammeln
  For j = 7 To 24
    objMA(Range("X" & j).Value) = 0
  Next

 'a Schleife Anfang (Spalten Wochentage Mo - So durchsuchen)
    For a = 6 To 12
    
    'b Schleife Anfang (Prio 1 bis 5 Abgleichen)
    For b = 22 To 25
    
        'i Schleife Anfang (Linienpositionen durchsuchen)
        For i = 8 To 33
        
        If Cells(i, a).Value = "" Then
            Wert = Range("E" & i).Value
            
            'j Schleife Anfang (MA Pool Durchsuchen)
            For j = 7 To 24
            
            If Cells(j, a + 9).Value & Cells(j, b).Value = Wert Then
                If objMA(Range("X" & j).Value) = 0 Then 'MA noch nicht eingeplant
                Range("N" & j).Copy
                Cells(i, a).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
                objMA(Range("N" & j).Value) = 1
                
                'Markieren wenn MA verplant
                ActiveSheet.Cells(j, a + 9).Value = "X"
                        
                Exit For
                End If
            End If
            
            Next j
            'j Schleife Ende

        End If
        Next i
        'i Schleife Ende
      
    Next b
    'b Schleife Ende
      'Ma wieder auf ungeplant setzen
             For Each oObj In objMA
             objMA(oObj) = 0
             Next oObj
             
Next a
'a Schleife Ende

MsgBox "Wochenplanung ist fertig"

End Sub

Hier eine Beispielmappe: https://www.herber.de/bbs/user/140280.xlsm

Liebe Grüße

Klara

Beiträge aus dem Excel-Forum zum Thema "Zellinhalte über Schleife zuordnen"