VBA Zeilen vergleichen und Unterschiede ausgeben
#1
Hallo zusammnen,

ich versuche zwei Tabellen innerhalb einer Datei miteinander zu vergleichen. - Ob dies nun Sinn macht oder nicht, da gleiche Daten auf ein Blatt gehören, sollte dabei erst einmal kein Thema sein, da ich die Datenstruktur nicht entscheidend ändern kann. Ich habe in meiner Beispieldatei in der Anlage beschrieben, was ich erreichen möchte. Einen Code von Fennek unter Verwendung des Dictionary Objekts, den ich hier im Forum gefunden habe, habe ich mit einigen Änderungen versehen, da ich der Meinung war, er könnte mit einigen Abänderungen zum Ziel fürhen. Ursprünglich sollte dieser Code Gemeinsamkeiten suchen, - daher dachte ich mir, - er könnnte vielleicht auch das Gegenteil tun. Dies macht er nun auch teilweise, allerdings gibt er mir auch die bereits vorhandenne Werte aus.

Was ich möchte:
In Tabelle2 soll verglichen werden ob es in Tabelle1 Artikel gibt, die in Tabelle 2 nicht vorhanden sind. Genau diese Artikelzeilen (Zeile x von Spalte A bis H) sollen dann in Tabelle2 unter den vorhandenen Werten ausgegeben werden. Es reicht dabei nicht die Mengenspalte zu vergleichen, denn bei gleichen Mengen in beiden Tabellenblättern würde die Feststellung von Unterschieden nicht gelingen. Daher habe ich die Mengenspalte und die Artikelnummer zusammengefasst als Schlüssel um den Vergleich korrekt herzustellen (Die Artikelnummern kommen immer nur ein Mal vor, bzw. jede Artikelnummer ist verschieden).

Ich würde mich freuen, wenn mir jemand den entscheidenden Tipp geben könnte, wie ich den Code verändern muss, um zum gewünschten Ergebnis zu kommen.

Grüße

NobX


Angehängte Dateien
.xlsm   Versuch Dictionary Objekt.xlsm (Größe: 29,01 KB / Downloads: 8)
Antworten Top
#2
Hi


Zitat:Daher habe ich die Mengenspalte und die Artikelnummer zusammengefasst als Schlüssel um den Vergleich korrekt herzustellen (Die Artikelnummern kommen immer nur ein Mal vor, bzw. jede Artikelnummer ist verschieden).
Warum? Wenn Artikel schon eindeutig. Was übersehe ich hier?


Filter Tab1(ArtNummer) auf <> Tab2(ArtNummer)
Copy Tab1

Gruß Elex
Antworten Top
#3
Hi Elex,

danke für die Rückmeldung.


Zitat:Warum? Wenn Artikel schon eindeutig. Was übersehe ich hier?


Ich meinte folgendes:

Wenn in Tabelle1 die Menge gleich Tabelle2 ist, obwohl die Artikelnummern verschieden sind, wird der Artikel nicht als fehlend erkannt:
Z. B. in Tabelle 1                  z. B. in Tabelle2
Menge       Artikelnummer         Menge                  Artikelnummer
  2                  XYZ99                   2                           XYZ33

Wenn ich hier den Unterschied nur an der Menge festmachen möchte, findet Excel gleiche Werte und wird den Wert nicht als fehlend erkennen. Deshalb wollte ich daraus zwei Strings machen in der Form: 2|YXZ99  <==> 2|XYZ33 und diese Unterschiede über die eindeutigen Keys des Dictionary Objekts herauszufiltern. Die zugehörigen Keys sollten mir dann die zu übertragenden Werte ermitteln bzw. finden und an der gewünschten Stelle ablegen.

Kann man dies besser nachvollziehen oder bin ich hier generell zu umständlich unterwegs? Ich fand die Idee mit dem Dictionary bei größeren Datenmengen einfach sehr plausibel und eine sehr schnelle speicherschonende Variante incl. dem tollen Code, den ich hier im Forum fand. Ich wollte es gerne selbst lösen, - bin leider gescheitert nach vielen (Fehl - ) Versuchen und bitte Euch im Forum um etwas Nachhilfe. 

Danke schon einmal an Alle, die mich dabei unterstützen.
Grüße und schönes WE ins Forum

NobX
Antworten Top
#4
Hi

Eine simple Variante wäre:

Die Formel in Tab1 Zelle J2. 
=(ZÄHLENWENNS(Tabelle2!B:B;B2)=0)*(A2<>"")
Nach unten ziehen und nach 1 gefiltert. Dann die Sichtbaren kopiert.

Oder muss es eine Makro Lösung sein, da du es zehn mal am Tag machst?

Gruß Elex
Antworten Top
#5
Hi Elex,

Deine Formel funktioniert natürlich auch sehr gut. - Wie Du schon richtig vermutet hast, benötigte ich die VBA - Lösung, da es Teil eines Codes sien soll, in dem noch  weitere Verarbeitungen erfolgen, die bereits funktionieren. - Dein Code funktioniert perfekt! - Vielen Dank dafür, - tolle Arbeit! Du hast mir damit sehr geholfen.
Eine Frage dazu hätte ich noch: es werden ganz korrekt die noch fehlenden Werte auf das gewünschte Tabellenblatt übertragen. Die Übertragung erfolgt incl. der gesamten Formatierung. - Wie könnte ich es erreichen, dass ausschließlich die Werte kopiert werden?
Kann ich dies in dieser Zeile einstellen bei xlFilterValues:
Code:
.AutoFilter.Range.AutoFilter field:=2, Criteria1:=T1Werte, Operator:=xlFilterValues
oder bei Special Cells:

Zitat:.Range("A2:H" & T1Z).SpecialCells(xlCellTypeConstants).Copy Sheets("Tabelle2").Range("A" & T2Z + 1)

Danke im Voraus

Grüße
NobX
Antworten Top
#6
Moin

Code:
   On Error Resume Next
   .Range("A2:H" & T1Z).SpecialCells(xlCellTypeConstants).Copy
   Sheets("Tabelle2").Range("A" & T2Z + 1).PasteSpecial xlPasteValues
   On Error GoTo 0

Gruß Elex
Antworten Top
#7
Hi Elex,

danke, das war es!
Grüße, - Thema hiermit erledigt.

NobX
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste