Abgleich von zwei Tabellen

Hallo,

Ich möchte mit zwei Schleifen zwei Tabellen miteinander vergleichen.
leider verlässt er die innere Schleife nicht, wenn der wert in der Tabelle1 „“ ist.
Was ich hab ist folgendes:

Public Sub Abgleich()

Dim x, y As Byte
Dim a As String
Dim b As String

a = 1
b = 1
x = 1
y = 8

Do While a <> „“
x = x + 1
y = 8
Do While b <> „“
a = Worksheets(„Tabelle1“).Cells(y, 3)
b = Worksheets(„Tabelle2“).Cells(x, 3)
If b = a Then Worksheets(„Tabelle2“).Rows(x).Delete
If b = a Then Worksheets(„Tabelle1“).Rows(y).Delete: Exit Do
y = y + 1

    Loop
Loop

End Sub

Kann jemand helfen ?
Christian

Moin,

leider verlässt er die innere Schleife nicht, wenn der wert in der Tabelle1 „“ ist.

dafür gibt es auch keinen Grund. a bestimmt das Verhalten der äußeren Schleife. Das heißt, Du kannst a in der inneren Schleife zuweisen, was immer Du willst, die äußere kriegt davon nichts mit. Die kommt erst wieder ins Spiel, wenn die innere verlassen wird.

btw:

  • Zähler werden aus gutem Grund meist als long vereinbart.
  • zweimal if b=a ist unsinnig; verwirrt nur.
  • Dim x, y As Byte ist eine böse Falle: nur y ist als Byte definiert.
    Gemeint ist wohl Dim x, Dim y As Byte

Gruß Ralf

Du hast wohl ein Problem mit den Datentypen. Versuch doch lieber, die Schleife zu verlassen, wenn die Eigenschaft des Cells-Objekt leer ist.

Hallo Christian

Ich überlege, was Du genau machen willst. Ich verstehe es so:

Du hast in Tabelle1 und in Tabelle2 jeweils in Spalte C irgendwelche Texte. Wenn ein solcher Text sowohl in Tabelle1 als auch in Tabelle2 (immer in Spalte C) vorkommt, soll in beiden Tabellen die ganze Zeile gelöscht werden. Alle Zeilen mit „C-Duplikaten“ sollen sowohl in Tabelle1 wie in Tabelle2 gelöscht werden.
Schlussendlich bleiben Dir in Tabelle1 und in Tabelle2 nur die Zeilen übrig, deren C-Werte nur in Tabelle1 bzw. nur in Tabelle2 vorkommen.
Ist das so richtig?

Dazu kommt noch: In Tabelle1 soll die Untersuchung in C8 beginnen (y=8), in Tabelle2 in C2: Da x bereits definiert ist mit x=1, ergibt das dann für den Start der ersten Schleife x=1+1 >> x=2 >> C2.
Ist das auch richtig?

Und schliesslich drittens: Du schreibst «Do While a <> „“» . Bedeutet das, wenn das Ende von Spalte C erreicht ist? Oder kann eine solche Leerzelle auch irgendwo unter andern Werten in der Spalte C vorkommen, wo die Schleife dann abgebrochen werden muss?

Wenn die Absicht klar ist, könnte man über einen Lösungsansatz nachdenken.
Grüsse Niclaus