Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
180to184
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
180to184
180to184
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellen vergleichen

Tabellen vergleichen
17.11.2002 21:25:00
Christian
Liebe Leute,

ich stehe vor dem Problem eine "ewige" Kundenliste (liste) und eine "aktuelle" (temp) miteinander vergleichen zu wollen, stimmen sie überein, ist es ok, fehlt jemand in der "liste", wird er/sie hinzugefügt, ist jemand von der Liste nicht mehr aktuell wird die Zeile markiert. Das funktioniert mit unten stehendem Code, leider birgt er zwei Probleme:

1. Es dauert relativ lange, daraus schließe ich dass meine Methode "unelegant" ist

2. Bei gleichlautenden Nachnamen findet der Code nur den ersten in der Liste (dann wird Vorname, GebDat... verglichen), also ist das Ergebnis nicht notwendigerweise richtig, ich habe aber mit FindNext nichts ordentliches zusammengebracht.

Der Code:

For z = 2 To anz

svnr = temp.Cells(z, 4).Value
gtag = temp.Cells(z, 5).Value
gmon = temp.Cells(z, 6).Value
gjah = temp.Cells(z, 7).Value
nnam = temp.Cells(z, 8).Value
vnam = temp.Cells(z, 10).Value

liste.Select
liste.Columns("F:F").Select
On Error GoTo neuer:
fund = Selection.Find(What:=nnam, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Row

If liste.Cells(fund, 7).Value = vnam And liste.Cells(fund, 2).Value = svnr And liste.Cells(fund, 3).Value = gtag And liste.Cells(fund, 4).Value = gmon And liste.Cells(fund, 5).Value = gjah Then
liste.Cells(fund, 17).Value = 1
Else

lianz = liste.Cells(8, 1).CurrentRegion.Rows.Count
zeil = lianz + 7

liste.Cells(zeil, 6).Value = temp.Cells(z, 8).Value
liste.Cells(zeil, 7).Value = temp.Cells(z, 10).Value
liste.Cells(zeil, 1).Value = temp.Cells(z, 3).Value
liste.Cells(zeil, 2).Value = temp.Cells(z, 4).Value
liste.Cells(zeil, 3).Value = temp.Cells(z, 5).Value
liste.Cells(zeil, 4).Value = temp.Cells(z, 6).Value
liste.Cells(zeil, 5).Value = temp.Cells(z, 7).Value
liste.Cells(zeil, 8).Value = temp.Cells(z, 16).Value
liste.Cells(zeil, 9).Value = temp.Cells(z, 18).Value
liste.Cells(zeil, 10).Value = temp.Cells(z, 19).Value
liste.Cells(zeil, 11).Value = temp.Cells(z, 20).Value
liste.Cells(zeil, 12).Value = temp.Cells(z, 21).Value
liste.Cells(zeil, 13).Value = temp.Cells(z, 23).Value
liste.Cells(zeil, 14).Value = temp.Cells(z, 24).Value
liste.Cells(zeil, 16).Value = "NEU"
End If

Next z

liste.Activate
Range("A8").Select

anz = ActiveCell.CurrentRegion.Rows.Count

For z = 8 To anz

If liste.Cells(z, 17).Value = "" And liste.Cells(z, 16).Value <> "NEU" Then

Range(Cells(z, 1), Cells(z, 16)).Interior.Color = RGB(255, 255, 0)
liste.Cells(z, 16).Value = "WEG"

End If
Next z


Exit Sub
neuer:

lianz = liste.Cells(8, 1).CurrentRegion.Rows.Count
zeil = lianz + 7

liste.Cells(zeil, 6).Value = temp.Cells(z, 8).Value
liste.Cells(zeil, 7).Value = temp.Cells(z, 10).Value
liste.Cells(zeil, 1).Value = temp.Cells(z, 3).Value
liste.Cells(zeil, 2).Value = temp.Cells(z, 4).Value
liste.Cells(zeil, 3).Value = temp.Cells(z, 5).Value
liste.Cells(zeil, 4).Value = temp.Cells(z, 6).Value
liste.Cells(zeil, 5).Value = temp.Cells(z, 7).Value
liste.Cells(zeil, 8).Value = temp.Cells(z, 16).Value
liste.Cells(zeil, 9).Value = temp.Cells(z, 18).Value
liste.Cells(zeil, 10).Value = temp.Cells(z, 19).Value
liste.Cells(zeil, 11).Value = temp.Cells(z, 20).Value
liste.Cells(zeil, 12).Value = temp.Cells(z, 21).Value
liste.Cells(zeil, 13).Value = temp.Cells(z, 23).Value
liste.Cells(zeil, 14).Value = temp.Cells(z, 24).Value
liste.Cells(zeil, 16).Value = "NEU"

Resume Next
End Sub


Bin dankbar für jede Anregung

Gruß

Christian

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Tabellen vergleichen
18.11.2002 00:02:58
Martin Bolleter
Hallo Christian

deine Variante hat wegen der Verwendung der Find-Methode verschiedene Nachteile:
Erstens würde er zB den Namen "Martin" finden, egal ob er als Vor- oder als Nachname vorkommt. Zweitens, wie du schon selber sagst, dürfte es recht aufwendig sein, eine Fundstelle auf Gleichheit bezüglich weiterer Kriterien zu prüfen. Und zuletzt, das sequentielle Lesen von Zellen in einer grossen Tabelle ist recht langsam.

Ich würde folgendes Vorgehen empfehlen:

Lade beide Listen je in eine Variant-Variable, zB:
DataTemp = temp
DataListe = liste

damit erhälst du je ein Datenfeld mit allen Werten, das du mit DataTemp(i,j) ansprechen kannst (beide Indices starten bei 1). Da dadurch die Daten komplett im Memory sind, verlaufen die Operationen wesentlich (bis zu 50 mal) schneller.

Dann kannst du in je einem Durchgang die Listen gegeneinander vergleichen und eine beliebige Kombination von Kriterien verwenden:
If DataTemp(i,5) = DataListe(i,5) then
if DataTemp(i,6) = DataListe(i,6) then
if DataTemp(i,7) = DataListe(i,7) then

vergleicht die Werte in Kolonne 5, 6 und 7, und nur wenn alle 3 gleich sind kommt anschliessend der Code, was dann zu tun ist.

Du brauchst wohl leider 2 Durchgänge, um für jede Liste die evtl fehlenden Datensätze zu finden.

Ich hoffe, du kannst damit was anfangen.
Gruss
Martin

Anzeige
Re: Tabellen vergleichen
18.11.2002 10:51:30
ThomasW
Servus..

ich weiß ja nicht, ob ich mit meinem Beitrag jetzt hier dem Hans einen gefallen tue oder nicht.
Also unter rtsoftwaredevelopement.de gibt es ein Tool, das nennt sich Synchroniser (kostenloser Download als Testversion) und das performt ganz gut. Das Progi kann zwei Excel Tabellen miteinander vergleichen (nach Kriterien, die du ihm vorher definierst).

so long
Thomas

Re: Tabellen vergleichen
18.11.2002 13:22:05
Stefan
Hallo Thomas,
habe mal versucht die Seite von rtsoftwaredevelopement.de zu erreichen. Scheint ein defekter Link zu sein, bitte mal checken.
Danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige