Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
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
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

3 Tabellen vergleichen, Geschwindikeit?

3 Tabellen vergleichen, Geschwindikeit?
25.10.2007 10:54:00
Mattes
Hallo Forum,
Ich habe hier ein kleines Problemchen.
Also, Ich möchte gerne 3 Tabellen in einer Arbeitsmappe miteinander wie folgt vergleichen:
Tabelle1 heißt Kunden
Tabelle2 heißt Interessenten
Tabelle3 heißt XX
Nun soll folgendes geschehen:
Prüfe in Kunden Spalte C und Spalte O ob diese mit XX Spalte C und O übereinstimmt.
wenn ja,
dann schreibe in XX Spalte A ein L und suche weiter.
Wenn nein dann
Prüfe in Interessenten Spalte C und Spalte O ob diese mit XX Spalte C und O übereinstimmt,
wenn ja
dann schreibe in XX Spalte A ein L und prüfe weiter,
wenn nein
dann schreibe in XX Spalte A ein N.
Ich kann leider die Mappe nicht hochladen, wegen Firmen Richtlinien (Kundenliste).
Hab hier mal einen Codeversuch gestartet:

Sub Vergleich_Makro()
Application.ScreenUpdating = False
Dim i As Integer
Dim j As Integer
Dim h As Integer
For i = 2 To 2591 'Kunden = 2591 Zeilen
For j = 2 To 102 'XX = 102 Zeilen
For h = 2 To 243 'Interessenten = 243 Zeilen
If Sheets("Kunden").Range("C" & i).Value = Sheets("XX").Range("C" & j).Value Then
ElseIf Sheets("Kunden").Range("O" & i).Value = Sheets("XX").Range("O" & j). _
Value Then
Sheets("XX").Range("A" & j).Value = "L"
Else
If Sheets("Interessenten").Range("C" & h).Value = Sheets("XX").Range("C" & j). _
Value Then
ElseIf Sheets("Interessenten").Range("O" & h).Value = Sheets("XX").Range("O" &  _
j).Value Then
Sheets("XX").Range("A" & j).Value = "L"
Else
Sheets("XX").Range("A" & j).Value = "N"
End If
End If
Next h
Next j
Next i
Application.ScreenUpdating = True
End Sub


Das Makro läuft unwahrscheinlich lange, und wenn ich es nach ner halben Stunde dann unterbreche, dann hat er es auch ausgeführt.
Gibt es einen schnelleren weg das zu vergleichen, oder kann man hier noch eine Schleife einbauen, das er mirt in der Statuszeile z.Bsp. die Zeilennummer angibt, in der er gerade sucht, oder sowas? Ich würde halt gerne wissen, wie lange das Makro braucht und ob er wirklich alles richtig macht, denn wie gesagt das läuft ne ganze Zeit und selbst nach ner Stunde ist er angeblich nicht fertig.
Schonmal vielen Dank für Eure Hinweise und Tips.
Grüße
Mattes

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 3 Tabellen vergleichen, Geschwindikeit?
25.10.2007 11:32:36
Jan
Hi Mattes,
na immerhin prüft Dein Skript mehr als 64 Millionen Kombinationen - das kann wirklich etwas dauern.
Wenn jeder Datensatz nur einmal gefunden werden muss und danach kein weiterer Vergleich stattfinden muss, kannst Du mit "Exit For" verhindern, dass der Rest der Schleife durchläuft und eigentlich nicht mehr produktiv arbeitet.
Soweit erstmal ein Ansatz.
Viele Grüße aus Hamburg,
Jan

AW: 3 Tabellen vergleichen, Geschwindikeit?
25.10.2007 11:59:00
Mattes
Hallo,
Danke für den Tip. habs mal eingebaut, allerdings schreibt er mir dann nur N in Spalte A der Tabelle XX, obwohl einige Übereinstimmungen da sein müssten.
Im Prinzip will ich Kunden Daten vergleichen, wir haben eine Kunden Liste aus unserem System gezogen, und in drei Tabellen aufgegliedert.
Tabelle Kunden = Bestandskunden (Existieren also schon und haben eine Kundennummer)
Tabelle Interessenten = Interessenten (Werden eventuell Kunden)
Tabelle XX = ohne Gruppenkennzeichen (Wurden nicht zugeordnet)
Wir können in unserem Warenwirtschaftssystem Kunden oder Interessenten anlegen und vergeben dabei ein Gruppenkennzeichen KD = Kunde INT = Interessent.
Jetzt gibt es aber schlauberger, die das vergessen, also hab ich die im System alle mit XX markiert.
Jetzt soll halt verglichen werden, ob ein Kunde in Tabelle XX steht, den es in Tabelle Kunden oder Tabelle Interessenten schon gibt, ist dies der Fall, dann Kennzeichne den Kunden in Tabelle XX in Spalte A mit L, ist dies Nicht der Fall, dann Kennzeiche mit N.
Suchkriterien sind halt Spalte C (Kundenname) und Spalte O (Ansprechpartner) und nur bei beidiger Übereinstimmung kann das L gesetzt werden, ansonsten N.
Ich hoffe ich konnte es nochmal besser erklären, isrt echt etwas kompliziert das zu erklären.
Danke für Euer Bemühen.
Grüße
Mattes

Anzeige
ohne VBA - Sverweis()
25.10.2007 12:19:47
magicman
Hallo Jan,
Füge in deine Tabellen einfach eine Hilfsspalte (z.B. X) ein in der Du Namen und Ansprechpartner verknüpfst:
z.B. c2&o2
Setze in den anderen Tabellen einfach einen SVERWEIS mit ISTFEHLER ein um zu prüfen, ob der Schlüssel in der anderen Tabelle vorkommt:
= wenn(istfehler(sverweis(x2;'XXX'!$x$2:$x$65000;1;0));"fehlt";"vorhanden in xxx"))
Das dürfte schneller gehen als dein Makro.
Dank kreativer Rechtschreibung wirst Du aber einiges nicht finden.
Gruß
Michael

AW: ohne VBA - Sverweis()
25.10.2007 12:32:42
Mattes
Hi,
Danke für den Tip, das probier ich gleich mal aus.
Das mit der Rechtschreibung hab ich mir auch schon überlegt, aber da kann ich dann halt nix machen.
Grüße
Mattes

Anzeige
AW: ohne VBA - Sverweis()
25.10.2007 14:00:00
fcs
Hallo Michael,
hier noch eine Makro-Lösung, die die Suchfunktion von Excel nutzt. Außerdem werden "nur" die Zeilen aus Tabelle XX in einer For-Next-Schleife abgearbeitet und gegen Einträge in den anderen beiden Tabellen geprüft. Die Ansprechpartner zu einem Kunden werden dann jeweils in einer Do-Loop-Schleife gesucht/geprüft.
So ist ein Makro wesentlich schneller.
Gruß
Franz

Sub Vergleich_Makro()
Application.ScreenUpdating = False
Dim i As Long
Dim strKunde, strAnsprech
Dim wksKunde As Worksheet, wksXX As Worksheet, wksInt As Worksheet
Dim rngSuchen As Range, strAddresse As String
Dim boGefunden As Boolean
Set wksKunde = Worksheets("Kunden")
Set wksXX = Worksheets("XX")
Set wksInt = Worksheets("Interessenten")
For i = 2 To wksXX.Cells(wksXX.Rows.Count, 3).End(xlUp).Row 'Zeilen im Blatt XX
strKunde = wksXX.Cells(i, 3).Value 'Wert Spalte C
strAnsprech = wksXX.Cells(i, 15).Value 'Wert Spalte O
'Prüfen ob Eintrag in XX Spalte C schon im Blatt Kunden vorhanden ist
boGefunden = False
Set rngSuchen = wksKunde.Columns(3).Find(what:=strKunde, LookIn:=xlValues, _
lookat:=xlWhole)
If rngSuchen Is Nothing Then
'Prüfen ob Eintrag in XX Spalte C schon im Blatt Interessenten vorhanden ist
Set rngSuchen = wksInt.Columns(3).Find(what:=strKunde, LookIn:=xlValues, _
lookat:=xlWhole)
If Not rngSuchen Is Nothing Then
strAddresse = rngSuchen.Address
'Prüfen ob für einen Eintrag im Blatt Interessenten die Spalte O übereinstimmt
Do
If strAnsprech = wksInt.Cells(rngSuchen.Row, 15) Then
wksXX.Cells(i, 1) = "L"
boGefunden = True
Exit Do
End If
Set rngSuchen = wksInt.Columns(3).FindNext(After:=rngSuchen)
Loop Until rngSuchen.Address = strAddresse
End If
Else
strAddresse = rngSuchen.Address
'Prüfen ob für einen Eintrag im Blatt Kunden die Spalte O übereinstimmt
Do
If strAnsprech = wksKunde.Cells(rngSuchen.Row, 15) Then
wksXX.Cells(i, 1) = "L"
boGefunden = True
Exit Do
End If
Set rngSuchen = wksKunde.Columns(3).FindNext(After:=rngSuchen)
Loop Until rngSuchen.Address = strAddresse
End If
If boGefunden = False Then wksXX.Cells(i, 1) = "N"
Next i
Application.ScreenUpdating = True
End Sub


Anzeige
AW: ohne VBA - Sverweis()
25.10.2007 14:13:00
Mattes
Hallo Franz,
Mensch das Teil geht ja ab.
Ich hatte es mit der sverweis sache gemacht, klappt auch. Dann hatte ich den Ehrgeiz es mit VBA zu machen, habs dann in drei Makros geteilt, klappt auch gut, aber Dein Code ist echt Top!!!
Ein Knopp, alles in einem Rutsch und hat nur 5 Sekunden gedauert ^^
Und das beste an allem, alle Drei Möglichkeiten boten das selbe Ergebnis.
Danke an alle für die Hilfe, ist halt ein super Forum hier :-)
Grüße
Mattes

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige