Excel, jeweils 2 Spalten einer Tabelle mit mehreren Spalten einer anderen Tabelle zeilenweise vergleichen

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Manné.

    Excel, jeweils 2 Spalten einer Tabelle mit mehreren Spalten einer anderen Tabelle zeilenweise vergleichen

    Hallo liebe Community,

    nach tagelanger Suche wende ich mich an euch und bitte um Hilfe.

    Mein wichtigstes Anliegen ist, 2 Spalten einer Tabelle mit jeweils 2, bzw. mehreren Spalten einer zweiten Tabelle zeilenweise zu vergleichen.
    Die Tabelle "Kundenwünsche sortiert" wird von einem Makro erzeugt, deshalb hilft mir keine bedingte Formatierung.

    Geänderte Datensätze sollten farblich hervorgehoben werden. Bestimmt ist es auch möglich geänderte, neue und weggefallene Datensätze mit bestimmten Farben zu kennzeichnen. Soweit bin ich aber noch lange nicht.

    Mein Makro funktioniert teilweise. Ich verstehe nicht, wieso der Name Huber, der in beiden Tabellen gleich ist, markiert wird.
    Ohne das "On Error..." bekomme ich in der Zeile "KWverk = KW & KW.Offset(0, 1)" die Fehlermeldung "Objektvariable oder With-Blockvariable nicht festgelegt". Hat das was mit Huber zu tun?
    Ich glaube es nicht.
    Eine Beispiel-Datei füge ich bei.

    Oh, mit Makro kann ich gar nicht hochladen.
    Hier ist das Makro, das in Modul1 gespeichert ist.


    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub DoppelteKennzeichnen()
    3. ' Farbmarkierung entfernen
    4. Sheets("Kundenwünsche sortiert").Select
    5. Columns("A:B").Select
    6. With Selection.Interior
    7. .Pattern = xlNone
    8. .TintAndShade = 0
    9. .PatternTintAndShade = 0
    10. End With
    11. Range("A1").Select
    12. Dim KWsort As Range
    13. Dim KW As Range
    14. Dim KWsortverk, KWverk ' Zelle A und B verketten
    15. With ThisWorkbook.Sheets("Kundenwünsche sortiert")
    16. For Each KWsort In .Range("A1:A" & .Cells(.Rows.Count, 2).End(xlUp).Row)
    17. KWsortverk = KWsort & KWsort.Offset(0, 1)
    18. ' On Error Resume Next
    19. ' On Error GoTo 0
    20. Set KW = ThisWorkbook.Sheets("Kundenwünsche").Range("A3:K32").Find(What:=KWsort)
    21. KWverk = KW & KW.Offset(0, 1)
    22. On Error Resume Next
    23. ' On Error GoTo 0
    24. If Not KWverk = KWsortverk Then
    25. KWsort.Offset(0, 0).Interior.ColorIndex = 44
    26. End If
    27. Next 'KWsort
    28. End With
    29. End Sub




    Für eure Hilfe bedanke ich mich schon im Voraus.

    Lieber Gruß
    Manfred
    Dateien
    Hallo Manfred
    Der Fehler in Zeile 24 entsteht wenn KW = Nothing ist, also das Find nichts findet.
    Dies kannst du beheben indem du eine Abfrage machst.

    Visual Basic-Quellcode

    1. If Not KW Is Nothing Then
    2. KWverk = KW & KW.Offset(0, 1)
    3. End If

    Den Fehler mit Hubert bekommst du, weil das Find nicht den Hubert findet, sondern den Schubert.
    Dies kannst du beheben indem du das Find mit LookAt:=xlWhole ergänzt.

    Visual Basic-Quellcode

    1. Set KW = ThisWorkbook.Sheets("Kundenwünsche").Range("A3:K32").Find(What:=KWsort, LookAt:=xlWhole)

    Gruss HenryV
    Falls ich das Problem lösen sollte, würde mein Code in etwa so aussehen.
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub AenderungenKennzeichnen()
    3. ' Farbmarkierung entfernen
    4. With Sheets("Kundenwünsche sortiert").Columns("A:B").Interior
    5. .Pattern = xlNone
    6. .TintAndShade = 0
    7. .PatternTintAndShade = 0
    8. End With
    9. With Sheets("Kundenwünsche").Columns("A:K").Interior
    10. .Pattern = xlNone
    11. .TintAndShade = 0
    12. .PatternTintAndShade = 0
    13. End With
    14. Dim KWsort As Range, KW As Range
    15. Dim KWsortverk As String, KWverk As String 'Zelle A und B verketten
    16. With ThisWorkbook.Sheets("Kundenwünsche sortiert")
    17. For Each KWsort In .Range("A1:A" & .Cells(.Rows.Count, 2).End(xlUp).Row)
    18. KWsortverk = KWsort.Value & KWsort.Offset(0, 1).Value 'Zelle A und B verketten
    19. Set KW = ThisWorkbook.Sheets("Kundenwünsche").Range("A3:K32").Find(What:=KWsort, LookAt:=xlWhole)
    20. If Not KW Is Nothing Then
    21. KWverk = KW.Value & KW.Offset(0, 1).Value
    22. If Not KWverk = KWsortverk Then
    23. 'Namen anders (orange)
    24. KWsort.Resize(, 2).Interior.ColorIndex = 44
    25. KW.Resize(, 2).Interior.ColorIndex = 44
    26. Else
    27. 'Namen gleich (grün)
    28. KWsort.Resize(, 2).Interior.ColorIndex = 43
    29. KW.Resize(, 2).Interior.ColorIndex = 43
    30. End If
    31. Else
    32. 'Namen nicht gefunden (rot)
    33. KWsort.Resize(, 2).Interior.ColorIndex = 22
    34. End If
    35. Next 'KWsort
    36. End With
    37. End Sub
    Hey, wie geil ist das denn?
    ...und so einfach.

    Ich hatte mir schon einen anderen Code ausgesucht und versucht umzuschreiben. Das hätte wahrscheinlich noch 2 Tage gedauert. Nicht, weil ich so wenig Zeit am Computer verbringe :)

    Noch nicht perfekt, aber bestimmt ausbaufähig.

    Vielen DANK HenryV

    Lieber Gruß
    Manfred
    Guten Abend HenryV und alle anderen,

    das Makro hab ich ein bisschen abgeändert, die Farben waren ein bisschen zu grell und die grüne Markierung brauche ich nicht.
    Ich habe heraus gefunden wie ich die erste und zweite Spalte ansprechen kann. Das ist aber auch schon alles und evtl. gar nicht notwendig.

    Schön wär es, wenn in der Tabelle "Kundenwünsche sortiert" die fehlenden in orange und die geänderten in gelb angezeigt werden würden, jeweils in der richtigen Spalte.
    In der Tabelle nur die geänderten, jeweils in der richtigen Spalte.

    Visual Basic-Quellcode

    1. Sub AenderungenKennzeichnen()
    2. ' Farbmarkierung entfernen
    3. With Sheets("Kundenwünsche sortiert").Columns("A:B").Interior
    4. .Pattern = xlNone
    5. .TintAndShade = 0
    6. .PatternTintAndShade = 0
    7. End With
    8. With Sheets("Kundenwünsche").Columns("A:K").Interior
    9. .Pattern = xlNone
    10. .TintAndShade = 0
    11. .PatternTintAndShade = 0
    12. End With
    13. Dim KWsort As Range, KW As Range
    14. Dim KWsortverk As String, KWverk As String 'Zelle A und B verketten
    15. With ThisWorkbook.Sheets("Kundenwünsche sortiert")
    16. For Each KWsort In .Range("A1:A" & .Cells(.Rows.Count, 2).End(xlUp).Row)
    17. KWsortverk = KWsort.Value & KWsort.Offset(0, 1).Value 'Kundenwünsche sort. Zelle A und B verketten
    18. Set KW = ThisWorkbook.Sheets("Kundenwünsche").Range("A3:K32").Find(What:=KWsort, LookAt:=xlWhole)
    19. If Not KW Is Nothing Then
    20. KWverk = KW.Value & KW.Offset(0, 1).Value 'Kundenwünsche Zelle A und B verketten
    21. If KWverk <> KWsortverk Then
    22. 'Zusatzinfo geändert (gelb)
    23. KWsort.Resize.Offset(0, 1).Interior.ColorIndex = 36
    24. KW.Resize.Offset(0, 1).Interior.ColorIndex = 36
    25. End If
    26. Else
    27. 'Namen geändert (orange)
    28. KWsort.Resize.Offset(0, 0).Interior.ColorIndex = 40
    29. '' KW.Resize.Offset(0, 0).Interior.ColorIndex = 40
    30. End If
    31. Next 'KWsort
    32. End With
    33. End Sub


    Im Netz kann ich auch leider nichts brauchbares finden.

    LG Manfred
    Dateien