[Excel] Vergleich 2er Spalten in 2 verschiedenen Tabellen mit Ausgabe in 3. Tabelle

Ich gebe zu, ich komme mit dem Code nicht wirklich klar.

Aber was spricht dagegen das zu nehmen was ich ganz am Anfang reingestellt habe? Es werden doch hiermit auch alle Treffer aufgelistet und du kannst sie weiter verwenden.

Gruß Thomas
 
Hallo

stimmt dein Code funktioniert wirklich so wie ich es haben will. Allerdings habe ich ihn ein wenig geändert, da ich möchte das bei einem Treffer die komplette Zeile in die leere Tabelle kopiert wird. Jetzt hab ich nur noch ein Problem, das die treffer korrekt untereinander ausgegeben werden aber nur beim ersten treffer die komplette zeile aus Tabelle 2 ausgegeben wird.
Private Sub Worksheet_Activate()
Dim zeile1, zeile2, zeile3

zeile1 = 1
zeile2 = 1
zeile3 = 1

'komplette Tabelle3 löschen
Tabelle3.Range("A1:Z65536").Clear

'Tabelle1 durchlaufen und mit Tabelle2 vergleichen
Do While Tabelle1.Cells(zeile1, 1) <> ""
Do While Tabelle2.Cells(zeile2, 1) <> ""
If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) Then
Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1)
Tabelle3.Cells(zeile3) = Tabelle2.Cells(zeile2)
zeile3 = zeile3 + 1
End If
zeile2 = zeile2 + 1
Loop
zeile1 = zeile1 + 1
zeile2 = 1
Loop
End Sub
 
Verstehe ich dich jetzt richtig das beim ersten Treffer die komplette Zeile aus Tabelle2 in Tabelle3 eingetragen werden soll und bei den restlichen Treffern nur noch der Wert aus Spalte 2 übernommen werden soll?

Für diesen Fall ändere den Code wie folgt ab:

Visual Basic:
Dim zeile1, zeile2, zeile3

zeile1 = 1
zeile2 = 1
zeile3 = 1
komplett = 0

'komplette Tabelle3 löschen
Tabelle3.Range("A1:Z65536").Clear

'Tabelle1 durchlaufen und mit Tabelle2 vergleichen
Do While Tabelle1.Cells(zeile1, 1) <> ""
    Do While Tabelle2.Cells(zeile2, 1) <> ""
        If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) And komplett = 0 Then
            Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1)
            komplett = 1
            Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 2)
            zeile3 = zeile3 + 1
        ElseIf Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) And komplett = 1 Then
            Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 2)
            zeile3 = zeile3 + 1
        End If
        zeile2 = zeile2 + 1
    Loop
    komplett = 0
    zeile1 = zeile1 + 1
    zeile2 = 1
Loop
 
Ok, dann nimm das Beispiel von ganz oben und vergleiche in dieser IF-Abfrage

Visual Basic:
        If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) Then
            Tabelle3.Cells(zeile3, 1) = Tabelle2.Cells(zeile2, 1)
            Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 3)
            zeile3 = zeile3 + 1
        End If

ob die Spaltenangaben stimmen.
Bei CELLS steht der erste Wert für die Zeile (hier immer mit den Variablen zeile1, zeile2 bzw. zeile3 belegt) und der zweite Wert steht für die Spalte (hier mit dem festen Wert 1 oder 2 für die Spalten A oder B) belegt.
Vielleicht musst du das für deine Tabellen noch anpassen!?
 
mein problem ist das die zeile die ausgelesen und kopiert werden muss 20 spalten hat und alle spalten müssen ausgelesen werden dehalb habe ich Tabelle3.Cells(zeile3, 2) = Tabelle2.Cells(zeile2, 3)
in Tabelle3.Cells(zeile3) = Tabelle2.Cells(zeile2) abgeändert, aber es wird nur die zeile des allerersten treffers ausgelesen, sonst listet der code nur noch die treffer selber auf aber nicht mehr die 20 spalten dahinter
 
Stef_an hat gesagt.:
achte bitte auch auf die zellen ab spalte AA, warum der code das macht versteh ich beim besten willen nicht.

Geht mir genau so, denn es gibt nichts im Code bei dem diese Spalten angesprochen werden.

Aber egal:

Visual Basic:
Dim zeile1, zeile2, zeile3

zeile1 = 1
zeile2 = 1
zeile3 = 1
 
'komplette Tabelle3 löschen
Tabelle3.Range("A1:Z65536").Clear
 
'Tabelle1 durchlaufen und mit Tabelle2 vergleichen
Do While Tabelle1.Cells(zeile1, 1) <> ""
    Do While Tabelle2.Cells(zeile2, 1) <> ""
        If Tabelle1.Cells(zeile1, 1) = Tabelle2.Cells(zeile2, 1) Then
'die nächsten 2 Zeilen sind neu/geändert
            Tabelle2.Range(zeile2 & ":" & zeile2).Copy
            Tabelle3.Range(zeile3 & ":" & zeile3).Insert
           zeile3 = zeile3 + 1
        End If
        zeile2 = zeile2 + 1
    Loop
    zeile1 = zeile1 + 1
    zeile2 = 1
Loop

Gruß Thomas
 
Eine Sache habe ich noch.
Da die Daten in Tabelle 1 und 2 in der Realität in verschiedenen .xls Dateien auf verschiedenen Servern liegen, wäre es nett von dir wenn du mir sagen könntest in welcher Form ich den Pfad zur Datei in den Code einfügen muss

Danke!
 
Also wenn es sich immer um die gleichen Dateien handelt, kannst du die Namen einfach vor die entsprechenden Tabellennamen schreiben:

"C:\Dokumente und Einstellungen\User\Eigene Dateien\Dateiname.xls!" & Tabelle2.Cells(zeile2, 1)
 
Zurück