Zwei Tabellen miteinander vergleichen

parafi

Mitglied
Guten Tag

Also vorne weg, mit Makros, etc habe ich sonst nicht viel am Hut. Ich Programmiere zwar auch, aber nicht in diesem Bereich..:D

Nun gut ich habe zwei Tabellen die abgeglichen werden müssen. Die Tabelle 2 enthält zum Teil die gleichen Datensätze wie die Tabelle 1. Alle Werte die in Tabelle 1 nicht vorkommen sollen in die Tabelle 3 geschrieben werden.

Dazu habe ich einen passenden Code im Internet gefunden.
Nur erhalte ich nun folgende Fehlermeldung: "Laufzeitfehler 9, Index ausserhalb des gültigen Bereichs"

Hier mein Code:
HTML:
Sub doppelte_Daten_suchen()
' vergleicht Tabelle 2 mit Tabelle 1 und schreibt Werte
' aus Tabelle 2, die in Tabelle 1 nicht vorkommen in Tabelle 3
Dim verg1(500), verg2(500), dopp(500) As Integer, num(500)  ' Variablen dimensionieren
Dim y As Integer, z As Integer, r As Integer, s As Integer  ' Variablen deklarieren
Dim zz As Integer, u As Integer                             ' Variablen deklarieren
' Tabelle 1 einlesen
Worksheets("Tabelle1").Activate             ' Tabelle 1 aktivieren
y = 2                                       ' Startwert für Schleifenzähler (hier Zeile 2)
Do While Cells(y, 1) <> ""                  ' Bedingung für Schleife (Laufe solange Zelle gefüllt ist)
    verg1(y) = Cells(y, 2)                  ' Inhalte in Variable einlesen
    y = y + 1                               ' Schleifenzähler um 1 erhöhen
Loop                                        ' Wendepunkt für Schleife
' Tabelle 2 einlesen
Worksheets("Tabelle2").Activate             ' Tabelle 2 aktivieren
z = 2                                       ' Startwert für Schleifenzähler (hier Zeile 2)
Do While Cells(z, 1) <> ""                  ' Bedingung für Schleife (Laufe solange Zelle gefüllt ist)
    num(z) = Cells(z, 1)                    ' Inhalte in Variable einlesen
    verg2(z) = Cells(z, 2)                  ' Inhalte in Variable einlesen
    z = z + 1                               ' Schleifenzähler um 1 erhöhen
Loop                                        ' Wendepunkt für Schleife
' Inhalte vergleichen
For r = 2 To y - 1                          ' Start äußere Schleife
    For s = 2 To z - 1                      ' Start innere Schleife
            If verg1(r) = verg2(s) Then     ' wenn Werte gleich dann ...
                dopp(s) = 1                 ' ... Variable auf 1 setzen
                Cells(s, 3) = "gleich"      ' ... Wert in Tabelle markieren
            End If                          ' Ende der Bedingung
    Next s                                  ' Wendepunkt für innere Schleife
Next r                                      ' Wendepunkt für äußere Schleife
' In Tabelle 3 schreiben
Worksheets("Tabelle3").Activate             ' Tabelle 3 aktivieren
zz = 1                                      ' Startwert für Schleifenzähler (hier Zeile 2)
For u = 1 To z - 1                          ' Start für Schleife
    If dopp(u) = 0 Then                     ' wenn Variable = 0 dann ...
        Cells(zz, 1) = num(u)               ' ... 1. Wert in Zelle schreiben
        Cells(zz, 2) = verg2(u)             ' ... 2. Wert in Zelle schreiben
        zz = zz + 1                         ' ... Schleifenzähler um 1 erhöhen
    End If                                  ' Ende der Bedingung
Next u                                      ' Wendepunkt für Schleife
End Sub

Das Ganze habe ich unter Visual Basic in die Tabelle 1 geschrieben. Korrekt?

Danke Euch!

parafi
 
Wenn ich das jetzt richtig getestet habe, müsste es dir helfen:

Visual Basic:
Dim bereich1 As Range
Dim bereich2 As Range
Dim treffer As Boolean

treffer = False

For Each bereich1 In Tabelle1.UsedRange

    For Each bereich2 In Tabelle2.UsedRange
        If bereich1 = bereich2 Then
            treffer = True
            Exit For
        End If
    Next

    If treffer = False Then
        Tabelle3.Cells((Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row) + 1, 1) = bereich1
    End If
    treffer = False
Next
 
Hi tombe

Deinen VB Code müsste ich dan einfach darunter hineinkopieren?
Ich komm da mit Aufteilung in Visual Basic nicht so zurecht. Bzw. Arbeite ich einfach sonst nie damit.
 
Ich weiß ja nicht wie der jetzige Code aufgerufen wird, aber du löscht jetzt einfach bei dir alles was zwischen "Sub doppelte_Daten_suchen()" und "End Sub" steht und kopierst dann meinen Code dafür rein.
 
Funktioniert soweit sehr gut! Danke schonmal..

Nun noch eine andere Frage:
Kann man auch zwei, oder drei Spalten miteinander vergleichen?
Sprich Tabelle1 mit Spalte A, B und C vergleichen mit Tabelle2 Spalte A, B und C?

Mein Aufbau der Excel Tabelle
HTML:
A                    B                  C
2Rad-Shop       beispielstrasse 11   Zürich
Dazu gibt es zu sagen das in Tabelle1 der Eintrag vielleicht an 10ter Stelle ist und er in Tabelle2 an 2ter Stelle steht.
 
Zuletzt bearbeitet:
Ok, dann machen wir es ganz anders:

Visual Basic:
Dim treffer As Boolean
Dim gesamt_tab1 As String
Dim gesamt_tab2 As String
Dim a As Integer
Dim b As Integer

treffer = False

For a = 1 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
'wenn noch mehr Spalten geprüft werden sollen einfach hier erweitern
    gesamt_tab1 = Tabelle1.Cells(a, 1) & " " & Tabelle1.Cells(a, 2) & " " & Tabelle1.Cells(a, 3)
    For b = 1 To Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row
'wenn noch mehr Spalten geprüft werden sollen einfach hier erweitern
        gesamt_tab2 = Tabelle2.Cells(b, 1) & " " & Tabelle2.Cells(b, 2) & " " & Tabelle2.Cells(b, 3)
        If gesamt_tab1 = gesamt_tab2 Then
            treffer = True
            Exit For
        End If
    Next b

    If treffer = False Then
        zeile = (Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row) + 1
        Tabelle3.Cells(zeile, 1) = Tabelle1.Cells(a, 1)
        Tabelle3.Cells(zeile, 2) = Tabelle1.Cells(a, 2)
        Tabelle3.Cells(zeile, 3) = Tabelle1.Cells(a, 3)
'weitere Spalten kommen dann entsprechend hier hin
    End If
    treffer = False

Next a

Hier werden jetzt in jeder Zeile die Spalten A, B, und C miteinander verglichen.
Wenn es mehr als drei Spalten sein sollen, dann an den oben gekennzeichneten Stellen entsprechend erweitern.
 

Neue Beiträge

Zurück