Inhalt zweier Tabellen vergleichen/aktualisiere

Ich möchte eine Formel erzeugen, die Preise der einen Tabelle mit den Preisen der zweiten vergleicht und ggf. mit den neuen Werten überschreibt. Hört sich einfach an? Es geht weiter; der gemeinsame Nenner beider Tabellen ist Produktcode. Nur, da die Schreibweise des Produktcodes in beiden Tabellen nicht immer identisch ist, ergibt sich vielleicht einen Haken. Also, in einfacher Computersprache möchte ich folgendes realisieren können: Produktcode Tabelle 1 mit Produktcode Tabelle 2 vergleichen; wenn diese identisch sind, Preis 1 mit Preis 2 vergleichen; wenn diese nicht identisch sind, Preis 1 durch Preis 2 ersetzen, ansonsten nichts ändern; wenn aber Produktcode 1 mit Produktcode 2 nicht identisch ist, soll die Tabellenzelle des Produktcode 1 mit irgendeiner Farbe gekennzeichnet werden. Fertig. Und dies für etwa 6000 Preise!
Hat jemanden bereits Erfahrung von so etwas? Ich kenne mich leider mit Excel zu wenig aus, deshalb die Hilfeschrei …:wink:

gemeinsame Nenner beider Tabellen ist Produktcode. Nur, da die
Schreibweise des Produktcodes in beiden Tabellen nicht immer
identisch ist, ergibt sich vielleicht einen Haken. Also, in

Hi Philip,
meine Glaskugel verrät mir nicht die unterschiedliche Schreibweise des Produktcodes.
Gruß
Reinhard

Das ist eher eine Aufgabe für Access oder dBase, also einer Datenbank mit Programmiersprache. Also aus Excel exportieren und in eine Datenbanksoftware deiner Wahl wieder einlesen. Dort erledigt das dann ein 10-Zeiler.

Gruß, multze

Hallo Philp,
dieser Vergleich geht nur per Makro. Hier die von mir verwendeten Beispiel-Tabellen und das Makro:

Tabellenblattname: Tabelle1

 A B C D E 
1 Code Preis Code fehlt 
2 A1 5 
3 A2 7 
4 B1 7 
5 B2 8 X 
6 A24 5 
7 A22 10 
8 A3 7 
9 A4 8 



Tabellenblattname: Tabelle2

 A B 
1 Code Preis 
2 A1 5 
3 A2 7 
4 B1 7 
5 A24 5 
6 A22 10 
7 A3 7 
8 A4 8 




Sub TabellenVergleich()
 Dim Code1 As Range, Code2 As Range, Code As Range, Zelle As Range
 Dim wks1 As Worksheet, wks2 As Worksheet
 Dim Preis1 As Integer, Preis2 As Integer
 Dim Zeile1 As Integer, Zeile2 As Integer, Spalte1 As Integer, Spalte2 As Integer
 Preis1 = 2 ' Spalte mit Preisen in Tabelle1
 Zeile1 = 2 'Zeile ab der in Tabelle1 die Codes stehen
 Spalte1 = 1 'Spalte in der die Codes in Tabelle1 stehen
 SpalteX = 5 ' Spalte in Tabelle1, in der ein X eingetragen wird, wenn Code fehlt
 Preis2 = 2 ' Spalte mit Preisen in Tabelle2
 Zeile2 = 2 'Zeile ab der in Tabelle2 die Codes stehen
 Spalte2 = 1 'Spalte in der die Codes in Tabelle2 stehen
 ' Bereich mit den Codes in Tabelle1
 Set wks1 = ThisWorkbook.Sheets("Tabelle1")
 With wks1
 Set Code1 = .Range(.Cells(Zeile1, Spalte1), .Cells(.UsedRange.Rows.Count, Spalte1))
 ' vorhandene "X"-Einträge löschen
 .Range(.Cells(Zeile1, SpalteX), .Cells(.UsedRange.Rows.Count, SpalteX)).ClearContents
 End With
 ' Bereich mit den Codes in Tabelle2
 Set wks2 = ThisWorkbook.Sheets("Tabelle2")
 With wks2
 Set Code2 = .Range(.Cells(Zeile2, Spalte2), .Cells(.UsedRange.Rows.Count, Spalte2))
 End With
 ' vorhandene Farbcodierung in Tabelle1 entfernen
 Code1.Interior.ColorIndex = xlColorIndexNone
 ' Codes vergleichen
 For Each Code In Code1
 Set Zelle = Code2.Find(Code.Value, , xlValue, xlWhole)
 If Zelle Is Nothing Then
 Code.Interior.ColorIndex = 6 'Farbcodierung (gelb) wenn Code in Tabelle2 fehlt
 ' Trägt ein X wenn Code in Tabelle2 Fehlt
 wks1.Cells(Code.Row, SpalteX).Value = "X"
 Else
 ' Eintragen des gefundenne Peises aus Tabelle2 in Tabelle1
 wks1.Cells(Code.Row, Preis1).Value = wks2.Cells(Zelle.Row, Preis2).Value
 End If
 Next Code
End Sub

Das Makro kopierst du im VBA-Edtor (Anzeige mit +F11) in ein Modul (ggf. zunächst neues Modul für Datei einfügen).

Ich hoffe meine Erläuterungen reichen aus, damit du das Makro ggf. an den Aufbau deiner Datei anpassen kannst.
Außer der Farbmakierung, wenn Code nicht in Tabelle2 gefunden wird, wird in Spalte 5 zusätzlich ein „X“ eingetragen. So kann man in Tabelle1 die Codes ohne Preis in Tabelle2 schnell finden oder auch mit Autofilter selektieren.

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]