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

Tabellenvergleich mit 2 Spalten

Tabellenvergleich mit 2 Spalten
29.04.2004 15:09:38
Sylvia
Hallo, ich brauche Hilfe beim Tabellenvergleich.
Mit einer Spalte klappt es schon fast aber nicht mit 2 Spalten.
Was ist hier falsch? Es sollen die beiden ersten Spalten beider
Tabellen verglichen werden und die Doppelten aus Tabelle2 sollen
mit der ganzen Zeile in Tabelle3 angezeigt werden. So sieht es jetzt aus:

Sub vergleich()
Dim vRow As Variant
Dim lRow As Long, lRowT As Long
Dim vln As Boolean
bln = Application.DisplayStatusBar
Application.DisplayStatusBar = True
lRow = 1
Do Until IsEmpty(Cells(lRow, 1))
vRow = Application.Match(Cells(lRow, 1).Value, Worksheets("Tabelle2").Columns(1), 0)
If Not IsError(vRow) Then
lRowT = lRowT + 1
Worksheets("Tabelle3").Cells(lRowT, 1).Value = Cells(lRow, 1).Value
Worksheets("Tabelle3").Cells(lRowT, 2).Value = Worksheets("Tabelle2").Cells(vRow, 2).Value
Worksheets("Tabelle3").Cells(lRowT, 3).Value = Worksheets("Tabelle2").Cells(vRow, 3).Value
Worksheets("Tabelle3").Cells(lRowT, 4).Value = Worksheets("Tabelle2").Cells(vRow, 4).Value
Worksheets("Tabelle3").Cells(lRowT, 5).Value = Worksheets("Tabelle2").Cells(vRow, 5).Value
Worksheets("Tabelle3").Cells(lRowT, 6).Value = Worksheets("Tabelle2").Cells(vRow, 6).Value
Worksheets("Tabelle3").Cells(lRowT, 7).Value = Worksheets("Tabelle2").Cells(vRow, 7).Value
Worksheets("Tabelle3").Cells(lRowT, 8).Value = Worksheets("Tabelle2").Cells(vRow, 8).Value
Worksheets("Tabelle3").Cells(lRowT, 9).Value = Worksheets("Tabelle2").Cells(vRow, 9).Value
Worksheets("Tabelle3").Cells(lRowT, 10).Value = Worksheets("Tabelle2").Cells(vRow, 10).Value
Worksheets("Tabelle3").Cells(lRowT, 11).Value = Worksheets("Tabelle2").Cells(vRow, 11).Value
Worksheets("Tabelle3").Cells(lRowT, 12).Value = Worksheets("Tabelle2").Cells(vRow, 12).Value
Worksheets("Tabelle3").Cells(lRowT, 13).Value = Worksheets("Tabelle2").Cells(vRow, 13).Value
Worksheets("Tabelle3").Cells(lRowT, 14).Value = Worksheets("Tabelle2").Cells(vRow, 14).Value
End If
lRow = lRow + 1
Loop
Application.DisplayStatusBar = bln
Application.StatusBar = False
Worksheets("Tabelle3").Activate
End Sub

Kommt aber irgendwie nur Blödsinn raus.... Bin noch Anfänger...
Können die Profis mir helfen?
Die Tabelle1 hat übrigens über 34000 Zeilen...
Gruß
Sylvia

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenvergleich mit 2 Spalten
29.04.2004 22:05:05
Christoph M
Hi Sylvia,
ich hab deinen Code noch nicht so ganz durchschaut, da ich nicht erkennen kann, von welcher Tabelle aus du deinen Code startest.
in meinem Bsp werden aus Tabelle1 und Tabelle2 die ersten beiden Spalten verglichen.
Wenn es Übereinstimmungen gibt, wird die jeweilige Zeile aus Tabelle2 nach Tabelle3
kopiert.
Gruß
Christoph
('ne Rückmeldung wäre nett)
Option Explicit

Sub VglZweiSpalten()
Dim vgl1, vgl2, LRow&, i&, k&
With Sheets("Tabelle2")
LRow = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LRow
vgl1 = Application.Match(.Cells(i, 1), Sheets("Tabelle1").Columns(1), 0)
vgl2 = Application.Match(.Cells(i, 2), Sheets("Tabelle1").Columns(2), 0)
If Not IsError(vgl1) And Not IsError(vgl2) And CLng(vgl2) = CLng(vgl1) Then
k = k + 1
.Rows(i).Copy Sheets("Tabelle3").Cells(k, 1)
End If
Next i
End With
End Sub

Anzeige
AW: Tabellenvergleich mit 2 Spalten
30.04.2004 07:13:24
Erich M.
Hallo Sylvia,
hallo Christoph,
zur Lösung von Sylvias Wunsch müsste der Code con Christoph noch leicht geändert
werden. Ich habe den Vorschlag von Christoph mal in meinem "Standard-Vergleichs-modul"
eingebaut. Bitte mal prüfen, wo noch Korrekturbedarf ist:
https://www.herber.de/bbs/user/5865.xls
mfg
Erich
AW: Tabellenvergleich mit 2 Spalten
30.04.2004 08:55:18
Sylvia
Hallo Erich, bei Deinem Beispiel wird nur Spalte1 von Tabelle1 mit Spalte1
von Tabelle2 verglichen...
Ich brauche aber eine Übereinstimmung über 2 Spalten. D.h. nur wenn
z.B. in Tabelle1 irgendwo 222 in Spalte1 steht und daneben in Spalte2
333 steht, soll überprüft werden ob dies irgendwo in Tabelle2 auch so ist.
Wenn ja, soll die ganze Zeile von Tabelle2 nach Tabelle3 kopiert werden.
Gruß
Sylvia
Anzeige
AW: Tabellenvergleich mit 2 Spalten
30.04.2004 19:17:24
Christoph M
Hi Erich,
die Idee, mir so ein Teil zu basteln, habe ich auch hin und wieder, aber im Endeffekt sind dabei so viele Bedingungen zu beachten, (je nach dem was verglichen werden soll, wie groß sind die Tabellen, wie vergleiche ich mehrere Spalten...mh...hüstel...wen du den Thread weiter verfolgst, weißt du warum, etc, etc)
Schlußendlich wird das, wenn ich alle Optionen einbauen will, dann ein riesen Teil, und ich muss mich immer darauf verlassen können...
Naja, bis es so weit ist, schreib ich mir den Code dann doch immer wieder für jede Aufgabe neu.
Gruß
Christoph
AW: Tabellenvergleich mit 2 Spalten
30.04.2004 08:51:21
Sylvia
Hallo Christoph, danke für die Antwort.
Ich starte von Tabelle1. Leider funktioniert Dein Makro bei mir
nicht. Es kommt gar kein Ergebnis in Tabelle3. Es kommt aber auch keine
Fehlermeldung. Deine Erläuterung war aber richtig... es soll bei Übereinstimmung
von Werten in Spalte1 und gleichzeitiger Übereinstimmung in Spalte2 die
komplette Zeile von Tabelle2 in Tabelle3 kopiert werden. Kannst Du es nochmal
überprüfen?
Gruß
Sylvia
Anzeige
AW: Tabellenvergleich mit 2 Spalten
30.04.2004 11:16:42
Christoph M
Hi Sylvia,
mal eine Bsp-Datei.

Die Datei https://www.herber.de/bbs/user/5878.xls wurde aus Datenschutzgründen gelöscht

in Tabelle 2 sind die Zellen rot markiert, die nicht mit Tabelle1 übereinstimmen.
Alle anderen werden von Tabelle2 nach Tabelle3 kopiert. (ich kann keinen Fehler erkennen)
Gruß
Christoph
('ne Rückmelung wäre nett)
AW: Tabellenvergleich mit 2 Spalten
30.04.2004 12:50:29
Sylvia
Hallo Christoph, so langsam verzweifle ich. Wenn ich es mit Deinen Zahlen mache
funktioniert es. Sobald ich meine Zahlen nehme geht nix mehr...
Ich habe mal einen Teil meiner Zahlen in die Tabelle kopiert.
Hier müßte er eigentlich eine Übereinstimmung finden (Zeile11 und Zeile2).
Wenn ich das Makro laufen lasse, ist in Tabelle 3 nichts zu finden.
Kannst Du es Dir einmal ansehen?
https://www.herber.de/bbs/user/5884.xls
Gruß
Sylvia
Anzeige
ok...ich nehme alles zurück
30.04.2004 15:50:00
Christoph M
Hallo Sylvia,
zugegeben, da hab ich etwas zu früh geschossen. Mein Code läuft prima und schnell aber leider nur genau dann, wenn es keine doppelten Einträge in einer der Spalte gibt.
Er sucht sich nämlich immer den ersten übereinstimmenden aus jeder Spalte und wenn die Zeilenzahl der jeweiligen Treffer nicht die gleiche ist, dann war's das für diesen Vergleich.
Ich arbeite dran...kann dir aber nicht versprechen, dass ich noch heute dazu komme...
sorry, aber ich lerne am besten aus meinen eigenen Fehlern
Gruß
Christoph
so müsste es klappen...
30.04.2004 19:04:47
Christoph M
Hi Sylvia,
bei über 30000 Zeilen muss man sich schon überlegen, wie man den Code einigermaßen effizient gestaltet. Deshalb bin ich der Funktion "MATCH" geblieben. Über Arrays ließe sich vielleicht noch etwas raus holen.
Aber erst mal ist es ja wichtig, dass der Code das erfüllt, was man will.
Die Funktion "MATCH" verlangt allerdings einen Eintrag in Tabelle2;SpalteA.
Probiers mal aus, solange du nicht Zeilen vergleichen willst, bei denen in Tabelle2, SpalteA nichts steht aber in SpalteB, denke ich, müsste es so laufen.
Gruß
Christoph
('ne Rückmeldung wäre nett)

Option Explicit

Sub VglZweiSpalten()
Dim vgl, LRow1&, LRow2&, i&, j&, k&
Dim wks1 As Worksheet, wks2 As Worksheet
Set wks1 = Sheets("Tabelle1")
Set wks2 = Sheets("Tabelle2")
LRow1 = wks1.Cells(Rows.Count, 1).End(xlUp).Row
LRow2 = wks2.Cells(Rows.Count, 1).End(xlUp).Row
wks1.Activate
For i = 1 To LRow2
For j = 1 To LRow1
vgl = Application.Match(wks2.Cells(i, 1), wks1.Range(Cells(j, 1), Cells(LRow1, 1)), 0)
If Not IsError(vgl) Then
j = j + CLng(vgl) - 1
If CStr(wks1.Cells(j, 2)) = CStr(wks2.Cells(i, 2)) Then
k = k + 1
wks2.Rows(i).Copy Sheets("Tabelle3").Cells(k, 1)
Exit For
End If
Else: Exit For
End If
Next j
Next i
End Sub

Anzeige
AW: so müsste es klappen...
30.04.2004 20:08:29
Erich M.
Hallo Christoph,
ich denke damit erfüllst Du genau die Vorstellungen von Sylvia.
Mich würde interessieren, was bei dieser Zeile
vgl = Application.Match(wks2.Cells(i, 1), wks1.Range(Cells(j, 1), Cells(LRow1, 1)), 0)
und zwar insb. bei
Cells(LRow1, 1)), 0)
passiert.
Das blicke ich überhaupt nicht.
Zu meinem "Standard-Modul":
Ich habe mir eine Datei zusammengestellt für verschiedene Vergleiche die ich immer
wieder benötige. Da ich nicht so fit bin mit den Makros, kann ich mir auf die Schnelle
nichts basteln, so dass ich mir damit eine Riesen-Erleichterung schaffe.
Wenn ich ab und zu im Forum was entdecke, dann stell ich das ein wenns passen könnte.
Der Vorteil der UF ist insb., dass ich sehr flexibel Dateien, Tabellen oder sogar
Spalten auswählen kann.
Also besten Dank schon mal, wenn du auf meine Frage antwortest!
mfg
Erich
Anzeige
@Erich
01.05.2004 08:25:09
Christoph M
Hallo Erich,
Match ist nichts anderes als die Excel-Funktion "VERGLEICH" - Syntax hierzu siehe Excel-Hilfe
mit "Application.WorksheetFunction.Match(...)" erzeugst du aber nicht die Funktion
à la: "ActiveCell.FormulaR1C1 = "=MATCH(..."
sondern gleich das Ergebnis dieser Funktion.
Auf "WorksheetFunction" kann man auch verzichten - weil man ja faul ist.
Ich muss also im obigen Code nicht jede Zeile durchlaufen und prüfen ob der Eintrag mit SpalteA übereinstimmt, sondern lass mir mit "Match" gleich die Zeilennummer ausgeben, und prüfe dann, ob SpalteB auch stimmt.
(deshalb ist das auch schneller, aber eben nur solange "Match" auch ein Ergebnis bringt - und das ist bei leeren Zellen nicht der Fall)
Ansonsten - pass auf beim Kopieren von fremdem Code. Du musst schon genau wissen, was dieser macht, sonst kannst du dich ja nicht darauf verlassen. Insbesondere, wenn du diesen in deinem "Standard-Modul" einsetzt und dieser dann unter bestimmten Bedingungen die falschen Ergebnisse liefert...
Gruß
Christoph
Anzeige
AW: @Erich
01.05.2004 08:47:13
Erich M.
Hallo Christoph,
besten Dank für die freundliche Erklärung. Da hab ich wieder was gelernt - auf die Idee
mit der EXCEL-Hilfe werde ich künftig auch mehr Augenmerk legen.
Ansonsten teste ich immer sehr intensiv, wenn ich fremde Codes kopiere um
böse Überraschungen zu vermeiden.
Aber deswegen verstehe ich auch das eine oder andere nicht; weil ich de facto VBA
nicht glernt habe, sondern einfach hier im Forum durch üben und testen lerne.
Schönes Wochenende!
mfg
Erich

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige