Hallo zusammen,
Ich hoffe, ihr könnt helfen. 
Wie schon beschrieben, habe ich eine Arbeitsmappe mit zwei Tabellenblättern, "Mitarbeiter" und Abrechnung".
Im Tabellenblatt "Mitarbeiter" sind die Mitarbeiter mit Personalnummer erfasst und bestimmten Kunden zugeordnet. Hier kann es auch vorkommen, dass ein Mitarbeiter mehreren Kunden zugeordnet ist.
Nun würde ich gerne folgendes erreichen:
Die Kunden sollen aus dem Tabellenblatt "Mitarbeiter" aus Spalte D in das Tabellenblatt Abrechnung kopiert werden. Dabei ist es wichtig, dass der Kunde im Tabellenblatt "Abrechnung" nur einmal kopiert wird und darunter alle Mitarbeiter, die diesem Kunden zugeordnet sind.
Da mit der Arbeitsmappe mehrere Kollegen arbeiten und Formeln dann immer wieder gelöscht werden, habe ich versucht es in VBA zu lösen. Leider stoße ich hier an meine Grenzen.
Ich habe mir bei dem Code folgendes gedacht:
Die Schleife iteriert durch jede Zeile der Quelltabelle, beginnend bei Zeile 5.
Für jede Zeile wird der Wert in Spalte 4 (Kundenname) ausgelesen und überprüft, ob er bereits im Wörterbuch Kundenliste vorhanden ist.
Falls nicht, wird der Wert hinzugefügt und der Kundenname sowie der Wert in Spalte 5 in der Zieltabelle kopiert.
Dann werde die Formatierungen auf die kopierten Zellen angewendet.
Anschließend werden die restlichen Daten aus der Quelltabelle in die Zieltabelle kopiert.
Nachdem ich "Microsoft Scripting Runtime" in den Verweisen aktiviert habe, läuft der Code ohne Fehlermeldungen durch, kopiert aber bedauerlicherweise nichts.
Könnt Ihr mir eventuell weiterhelfen?
Hier der Code:
Code:
Sub ModKopieren()
    'Variable für die Quelle Tabelle
    Dim sourceSheet As Worksheet
    'Variable für die Ziel Tabelle
    Dim destSheet As Worksheet
    'Variable für die letzte belegte Zeile in Spalte D der Quelle Tabelle
    Dim lastRowSource As Long
    'Variable für die nächste leere Zeile in Ziel Tabelle
    Dim nextEmptyRow As Long
    'Variable für den Namen des Kunden
    Dim customerName As String
    'Variable für eine Liste, die bereits aufgelisteten Kunden enthält
    Dim customerList As Scripting.Dictionary
    ' Quelle Tabelle festlegen
    Set sourceSheet = ThisWorkbook.Worksheets("Mitarbeiter")
    ' Ziel Tabelle festlegen
    Set destSheet = ThisWorkbook.Worksheets("Abrechnung")
    ' Letzte belegte Zeile in Spalte D der Quelle Tabelle suchen
    lastRowSource = sourceSheet.Cells(sourceSheet.Rows.Count, "D").End(xlUp).Row
    ' Nächste leere Zeile in Ziel Tabelle suchen
    nextEmptyRow = destSheet.Cells(destSheet.Rows.Count, 1).End(xlUp).Row + 1
    ' Neue Liste erstellen
    Set customerList = New Scripting.Dictionary
    ' Schleife für jede Zeile von 5 bis letzte belegte Zeile
    For i = 5 To lastRowSource
        ' Kundennamen aus Quelle Tabelle lesen
        customerName = sourceSheet.Cells(i, 4).Value
        ' Prüfen ob der Kundenname noch nicht in der Liste enthalten ist
        If Not customerList.Exists(customerName) Then
            ' Kundennamen zur Liste hinzufügen
            customerList.Add customerName, customerName
            ' Kundennamen in die Ziel Tabelle schreiben
            destSheet.Cells(nextEmptyRow, 1).Value = customerName
            destSheet.Cells(nextEmptyRow, 2).Value = sourceSheet.Cells(i, 5).Value
            ' Formatierung für die Zellen
            With destSheet.Range("A" & nextEmptyRow & ":B" & nextEmptyRow)
                .Font.Bold = True
                .Interior.Color = RGB(135, 206, 255)
            End With
            ' Nächste leere Zeile suchen
            nextEmptyRow = nextEmptyRow + 1
        End If
        ' Daten in Ziel Tabelle schreiben
        destSheet.Cells(nextEmptyRow, 1).Value = sourceSheet.Cells(i, 1).Value
        destSheet.Cells(nextEmptyRow, 2).Value = sourceSheet.Cells(i, 2).Value
        destSheet.Cells(nextEmptyRow, 3).Value = sourceSheet.Cells(i, 3).Value
        nextEmptyRow = nextEmptyRow + 1
    Next i
    MsgBox "Daten wurden erfolgreich kopiert und sortiert!"
    
End Sub
Danke und viele Grüße,
Mario