Vergleich zwei Blätter

Bild

Betrifft: Vergleich zwei Blätter
von: Larissa Apfel
Geschrieben am: 25.06.2015 09:41:02

Hallo,
folgende Ausgangslage liegt vor:
Ich habe zwei Blätter mit ähnlichen Einträgen. Nun möchte ich überprüfen, ob sich entweder Spalte A oder Spalte E geändert hat. Die erste Mappe ist die neue Mappe mit den veränderten Werten:

Sub Vergleich()
Set nwkb = ThisWorkbook.Worksheets(1)
Set awkb = ThisWorkbook.Worksheets(2)
For x = 1200 To 2 Step -1
    For y = 1200 To 2 Step -1
    If nwkb.Range("A" & x) = awkb.Range("A" & y) And nwkb.Range("C" & x) = awkb.Range("C" & y)  _
And nwkb.Range("E" & x) = awkb.Range("E" & y) Then
        nwkb.Range("H" & x).Value = "No changes"
    ElseIf nwkb.Range("E" & x).Value < awkb.Range("E" & y).Value Or nwkb.Range("E" & x).Value >  _
awkb.Range("E" & y).Value And IsNumeric(awkb.Range("E" & y).Value) And IsNumeric(nwkb.Range("E" & x).Value) And awkb.Range("E" & y).Value > 0 Then
        nwkb.Range("H" & x).Value = "neuer Preis"
        
    End If
    
    Next
Next
End Sub
Jetzt möchte ich aber noch eine Unterscheidung, ob sich der Preis (Spalte E) geändert hat oder die Nummer (Spalte A). Das kriege ich aber im Moment nicht hin, habt ihr eine Idee?

Bild

Betrifft: AW: Vergleich zwei Blätter
von: Senna
Geschrieben am: 25.06.2015 11:46:19
Hallo Larissa,
als erstes fällt mir auf, dass du keine zwei Schleifen benötigst - x und y sind immer gleich, du brauchst also nur eins von beiden :).
Dann stellt sich mir die Frage, ob in Spalte E überhaupt was anderes als eine Zahl stehen sollte. Oder was passieren soll, wenn hier keine Zahl steht.
Ich versuche dir aber mal zu helfen:


Sub Vergleich()
Dim nwkb as Worksheet
Dim awkb as Worksheet
Dim x%
Set nwkb = ThisWorkbook.Worksheets(1)
Set awkb = ThisWorkbook.Worksheets(2)
For x = 1200 To 2 Step -1
    
    If nwkb.Range("A" & x) = awkb.Range("A" & x) And nwkb.Range("C" & x) = awkb.Range("C" & x)  _
And nwkb.Range("E" & x) = awkb.Range("E" & x) Then
        nwkb.Range("H" & x).Value = "No changes"
    Else
      If nwkb.Range("E" & x).Value <> awkb.Range("E" & x).Value Then
        nwkb.Range("H" & x).Value = "neuer Preis"
      End If
      If nwkb.Range("A" & x).Value <> awkb.Range("A" & x).Value Then
        nwkb.Range("H" & x).Value = "neue Nummer"
      End If 
      If nwkb.Range("E" & x).Value <> awkb.Range("E" & x).Value AND nwkb.Range("A" & x).Value <> _
 awkb.Range("A" & x).Value Then
        nwkb.Range("H" & x).Value = "neuer Preis und neue Nummer"
      End If  
    End If
    
    Next
Next
End Sub


Bild

Betrifft: AW: Vergleich zwei Blätter
von: Senna
Geschrieben am: 25.06.2015 11:49:18
Einmal Next muss natürlich auch noch raus.

Bild

Betrifft: AW: Vergleich zwei Blätter
von: Larissa Apfel
Geschrieben am: 25.06.2015 11:52:26
Das Problem bei der Sache ist, dass die Einträge nicht gleich nummeriert sind. Daher die zwei Schleifen - meine Theorie..

Bild

Betrifft: AW: Vergleich zwei Blätter
von: Michael
Geschrieben am: 25.06.2015 20:01:33
Hi Larissa,
ich habe das Gefühl, die ganze Geschichte ist in sich nicht stimmig: um die Frage effektiv beantworten zu können, bräuchte man nähere Informationen, was in welcher Spalte enthalten ist bzw. (besser) eine Beispieldatei mit "neutralen" Daten.
Der zweite Teil Deiner IF-Abfragen enthält nämlich keinen weiteren Zugriff zu Spalte C.
Das bedeutet, daß der Code (außer alle drei Spalten sind identisch) mehr oder weniger zufällige Werte miteinander vergleicht. Das führt dazu, daß letztlich durch das komplette Durchlaufen der inneren Schleife der Wert des Vergleichs immer nur aus dem letzten Datensatz (also der 1. Zeile) übernommen wird; alle vorhergehenden werden immer wieder überschrieben.
Larissas Code habe ich nicht weiter angesehen, weil er ja wegen Deines Kommentars "nicht gleich nummeriert" eh nicht tut.
Was mir bei der ganzen Geschichte fehlt, ist, theoretisch ausgedrückt, der "eindeutige" Schlüssel, also die Information, auf welche Weise (welche Spalte) beide Tabellen verknüpft sind.
Welche Daten sind denn "nicht gleich nummeriert"?
Und welche Daten sind in beiden Tabellen "identisch"? Eine Artikelbezeichnung oder irgendwas?
Wie gesagt, lad am besten ne Beispieldatei hoch.
Schöne Grüße,
Michael
P.S.: das kannste nicht bezahlen! Ich hab jetzt den Nachmittag mit dem Ding verblödelt, weil es mich mal wieder gejuckt hat...
Ausgehend von der Annahme, daß in der Spalte C der jeweils übereinstimmende Wert, etwa ne Artikelnr. steht, sieht das Ganze so aus: https://www.herber.de/bbs/user/98482.xls
Da rufst Du bitte auf: Vergleich_Opti
Die zwei Werte für nz bzw. az (die unterste Zeile mit Werten) paßt Du bitte an oder läßt sie von Excel ermitteln, sinngemäß:
az = range("a"&rows.count).end(xlup).row+1
P.P.S.: Die Sache läuft "halb in Excel, halb in VBA": im Hilfsblatt sind ein paar Formeln hinterlegt, die Du bitte nicht anfaßt!
*Wenn* die Logik so ist, wie Du es Dir vorstellst, könnte man das auch direkt kodieren.
PePePeeS: Das Ding ist zwar optimierbar, auch so ziemlich fix, um nicht zu sagen rasend schnell... Muß ja mal gesagt werden.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Vergleich zwei Blätter"