Anzeige
Archiv - Navigation
520to524
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
520to524
520to524
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zwei Tabellen vergleichen, Dublikate herausfiltern

Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 14:15:14
Sebastian
SORTIERPROBLEM
Ich habe folgendes Problem, zwei Tabellen je zwei Spalten. Aus diesen beiden Tabellen soll ich die Duplikate in eine dritte Tabelle abspeichern. Ich kopiere also beide Tabellen in Tabelle3 und sortiere die Inhalte und suche dann mit einem Sortierprogamm die Dubletten heraus, den Rest lösche ich. Soweit gut, im einzelnen funktionieren die Teile, im Zusammenspiel kommt beim Sortieren eine Fehlermeldung. Hier übersehe ich etwas und fehlt es mir eindeutig an Verständnis. Der Teil, welcher die Duplikate herausfiltert funktioniert ebenfalls.
Kann mir hier jemand einen Tipp geben...
*********************************************************************

Private Sub CommandButton1_Click()
Dim Target As Range
Dim wks As Worksheet
Dim rngA As Range, rngB As Range, wksA As Range
Dim iRow As Integer, iCounter As Integer, iCol As Integer
Application.ScreenUpdating = False
Set rngA = Worksheets("Tabelle1").Range("A1").CurrentRegion
Set rngB = Worksheets("Tabelle2").Range("A1").CurrentRegion
Set wks = Worksheets("Tabelle3")
Set wksA = Worksheets("Tabelle3").Range("A1").CurrentRegion
'SpalteA,B von Tabelle1 und Tabelle2 werden nach Tabelle3 kopiert
iCol = rngA.Columns.Count
If rngB.Columns.Count > iCol Then
iCol = rngB.Columns.Count
End If
For iCounter = 1 To iCol
wks.Cells(1, iCounter) = "Spalte" & iCounter
Next iCounter
wks.Rows(1).Font.Bold = True
rngA.Range("A1").CurrentRegion.Copy wks.Range("A2")
iRow = wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
rngB.Range("A1").CurrentRegion.Copy wks.Cells(iRow, 1)
'Sprung auf Überschrift von Tabelle3
'Application.Goto Reference:="Extract"
'Sortieren von Tabelle 3
wksA.Range("A1").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess
'Datensatzduplikate herausfiltern
i = 2
While Cells(i, 1) <> ""
If Cells(i, 1) <> Cells(i + 1, 1) Then
Rows(i).Delete
ElseIf Cells(i, 2) <> Cells(i + 1, 2) Then
Rows(i).Delete
Else
While Cells(i, 1) = Cells(i + 1, 1) And Cells(i, 2) = Cells(i + 1, 2)
Rows(i + 1).Delete
Wend
i = i + 1
End If
Wend
wks.Columns.AutoFit
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 15:06:41
andre
Hallo Sebastian,
Du musst Excel auch mitteilen dass der Key1:=wksA.Range(..) ist. Wobei mit wksA nur der vor dem Übertragen gefüllte Bereich ist. Ich würde eher wks.columns("A:AA") gehen oder wo auch immer das aufhört ;-)
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 16:06:05
Sebastian
Danke, mit dem Columns funktioniert es prächtig, allerdings auf der falschen Tabelle. Ich aktiviere zwar Tabelle3, der Sort-Befehl aber läuft auf Tabelle1. Gebe ich allerdings zum columns-Befehl noch die wks-SET-Variable hinzu, dann kommt ein Laufzeitfehler.
Untenstehender Sortierbefehl sortiert TABELLE1.

'Sortieren von Tabelle 3
Columns("A:AA").Sort key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Untenstehender Sortierbefehl auf TABELLE2 bringt Laufzeitfehler.

'Sortieren von Tabelle 3
wks.Columns("A:AA").Sort key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
IRGENDETWAS GRUNDSÄTZLICHES VERSTEHE ICH FALSCH. Es geht darum, den Focus auf Tabellenblatt3 zu legen und dann in diesem Blatt zu sortieren.
Kannst du mir nochmals einen Tipp geben...
Danke
Sebastian
******************************************************************

Private Sub CommandButton1_Click()
Dim Target As Range, key1 As Range
Dim wks As Worksheet
Dim rngA As Range, rngB As Range, wksA As Range
Dim iRow As Integer, iCounter As Integer, iCol As Integer
Application.ScreenUpdating = False
Set rngA = Worksheets("Tabelle1").Range("A1").CurrentRegion
Set rngB = Worksheets("Tabelle2").Range("A1").CurrentRegion
Set wks = Worksheets("Tabelle3")
Set wksA = Worksheets("Tabelle3").Range("A1").CurrentRegion
'SpalteA,B von Tabelle1 und Tabelle2 werden nach Tabelle3 kopiert
iCol = rngA.Columns.Count
If rngB.Columns.Count > iCol Then
iCol = rngB.Columns.Count
End If
For iCounter = 1 To iCol
wks.Cells(1, iCounter) = "Spalte" & iCounter
Next iCounter
wks.Rows(1).Font.Bold = True
rngA.Range("A1").CurrentRegion.Copy wks.Range("A2")
iRow = wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
rngB.Range("A1").CurrentRegion.Copy wks.Cells(iRow, 1)
'Sprung auf Überschrift von Tabelle3
wks.Activate
Application.Goto Reference:="Extract"
'Sortieren von Tabelle 3 (mit wks oder wksa.columns(1) == Fehler!!)
Columns("A:AA").Sort key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Datensatzduplikate herausfiltern
i = 2
While Cells(i, 1) <> ""
If Cells(i, 1) <> Cells(i + 1, 1) Then
Rows(i).Delete
ElseIf Cells(i, 2) <> Cells(i + 1, 2) Then
Rows(i).Delete
Else
While Cells(i, 1) = Cells(i + 1, 1) And Cells(i, 2) = Cells(i + 1, 2)
Rows(i + 1).Delete
Wend
i = i + 1
End If
Wend
wks.Columns.AutoFit
End Sub

Anzeige
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 16:15:09
andre
Hallo Sebastian,
wo ist denn Extract? Wenn das nicht auf Tabelle3 ist dann ist es kein Wunder ...
Also nochmal
- wks vorn und beim key1 !!
'Sortieren von Tabelle 3
wks.Columns("A:AA").Sort key1:=wks.Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
oder
'Sortieren von Tabelle 3
Sheets("Tabelle3").Activate
Columns("A:AA").Sort key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Für Tabelle2 entsprechend, nur wenn Du es mit wks machst musst Du dem vorher Tabelle2 auch zuweisen.
Grüße, Andre
Anzeige
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 16:40:55
Sebastian
Danke, Andre... das SORT funktioniert. Ich weiss jetzt, wo es bei meinem Verständnis hapert. Jetzt funktioniert das Sortieren auf Tabelle3... was plötzlich nicht mehr läuft ist das Herausfiltern der Duplikate. VBA macht es jetzt wieder auf Tabelle1 (ich mein, die Duplikatefunktion läuft prächtig, aber auf dem falschen Tabellenblatt.)... hmmm, da habe ich einen Knopf. Wir haben den Focus beim Sortieren auf Tabelle3 gelegt, strange... etwas kapiere ich da nicht, wie VBA das mit den Tabellenblättern macht...
Hast du mir noch eine Idee...
Sebastian


Private Sub CommandButton1_Click()
Dim Target As Range
Dim wks As Worksheet
Dim rngA As Range, rngB As Range, wksA As Range
Dim iRow As Integer, iCounter As Integer, iCol As Integer, iRowT As Integer
Application.ScreenUpdating = False
Set rngA = Worksheets("Tabelle1").Range("A1").CurrentRegion
Set rngB = Worksheets("Tabelle2").Range("A1").CurrentRegion
Set wks = Worksheets("Tabelle3")
Set wksA = Worksheets("Tabelle3").Range("A1").CurrentRegion
'SpalteA,B von Tabelle1 und Tabelle2 werden nach Tabelle3 kopiert
iCol = rngA.Columns.Count
If rngB.Columns.Count > iCol Then
iCol = rngB.Columns.Count
End If
For iCounter = 1 To iCol
wks.Cells(1, iCounter) = "Spalte" & iCounter
Next iCounter
wks.Rows(1).Font.Bold = True
rngA.Range("A1").CurrentRegion.Copy wks.Range("A2")
iRow = wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
rngB.Range("A1").CurrentRegion.Copy wks.Cells(iRow, 1)
'Sprung auf Überschrift von Tabelle3
Sheets("Tabelle3").Activate
'Sortieren von Tabelle 3
wks.Columns("A:AA").Sort key1:=wks.Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Datensatzduplikate herausfiltern
'Sheets("Tabelle3").Activate --> hat keine Wirkung
i = 2
While Cells(i, 1) <> ""
If Cells(i, 1) <> Cells(i + 1, 1) Then
Rows(i).Delete
ElseIf Cells(i, 2) <> Cells(i + 1, 2) Then
Rows(i).Delete
Else
While Cells(i, 1) = Cells(i + 1, 1) And Cells(i, 2) = Cells(i + 1, 2)
Rows(i + 1).Delete
Wend
i = i + 1
End If
Wend
wks.Columns.AutoFit
End Sub

Anzeige
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 17:24:59
andre
Hallo Sebastian,
Im letzten teil vom code löschst Du die Daten wieder weg, die Du von Tabelle1 auf Tabelle3 kopiert hast. Du müsstest die Schleife mal vom Ende beginnen dann könnte es was werden.
Du müsstest mal versuchen, Dich auf eine Art des Umgangs mit den Blättern zu konzenentrieren - zumindest in einem Projekt, dann kommt man auch nicht so durcheinander. Ich arbeite ganz gerne ohne das Activate. Man sieht zuweilen etwas besser durch wenn man die Blattnamen direkt an der benötigten Stelle verwendet, das verlängert aber den code, und da hilft das with ...
Hier mal einige Varianten:
'1.
Set wks = Worksheets("Tabelle3")
..
wks.Columns("A:AA").Sort key1:=wks.Range("A1"), ...
...
'2.
Set wks = Worksheets("Tabelle3")
..
With wks
.Columns("A:AA").Sort key1:=.Range("A1"), ...
End With
...
'3.
'ohne set
..
Sheets("Tabelle1").Columns("A:AA").Sort key1:=Sheets("Tabelle1").Range("A1"), ...
...
'4.
'ohne set
..
With Sheets("Tabelle1")
.Columns("A:AA").Sort key1:=.Range("A1"), ...
End With
Das Du auf dem falschen Blatt bist hängt bestimmt mit Deinem Berecich Extract zusammen. Also nicht einfach weglöschen, sondern dorthin setzen, wo Du es benötigst. Auf Tabelle3 bist Du spätestens bzw. ab dem ...Activate. Wo Du vorher bist hängt davon ab, wo Du gerade warst als Du das Makro gestartet hast. Wo Dein Makro an manchen Stellen was macht hast Du über die Bereiche definiert.
Noch ein Tip: Wenn Du es dann geschafft hast versuche mal als zweite Lösung die Funktion Spezialfiltern - ohne Duplikate. Da musst Du die Daten aber auf dem gleichen Blatt zwischenparken und dann ausschneiden und auf Tabelle3 einfügen ;-)
Grüße, Andre
Anzeige
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 17:28:55
andre
Hallöchen,
das mit dem löschen passt, ich hatte beim testen nur gerade keine Duplikate ;-)
Grüße, Andre
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
20.11.2004 00:18:22
Sebastian
Ich werde das mal durchdenken. Nochmals, Danke.
Sebastian
AW: Zwei Tabellen vergleichen, Dublikate herausfiltern
19.11.2004 17:13:43
Sebastian
Hat sich erledigt. Das Ding funktioniert.
Ich danke DIR Andre, wärst Du in meiner Gegend, wäre ein Bier Dir sicher. So hier einfach meine Wertschätzung Deiner Arbeit.
Sebastian
*************************************************

Private Sub CommandButton1_Click()
Dim Target As Range
Dim wks As Worksheet
Dim rngA As Range, rngB As Range, wksA As Range
Dim iRow As Integer, iCounter As Integer, iCol As Integer, iRowT As Integer
Application.ScreenUpdating = False
Set rngA = Worksheets("Tabelle1").Range("A1").CurrentRegion
Set rngB = Worksheets("Tabelle2").Range("A1").CurrentRegion
Set wks = Worksheets("Tabelle3")
'SpalteA,B von Tabelle1 und Tabelle2 werden nach Tabelle3 kopiert
iCol = rngA.Columns.Count
If rngB.Columns.Count > iCol Then
iCol = rngB.Columns.Count
End If
For iCounter = 1 To iCol
wks.Cells(1, iCounter) = "Spalte" & iCounter
Next iCounter
wks.Rows(1).Font.Bold = True
rngA.Range("A1").CurrentRegion.Copy wks.Range("A2")
iRow = wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
rngB.Range("A1").CurrentRegion.Copy wks.Cells(iRow, 1)
'Sprung auf Überschrift von Tabelle3
Sheets("Tabelle3").Activate
'Sortieren von Tabelle 3
wks.Columns("A:AA").Sort key1:=wks.Range("A1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Datensatzduplikate herausfiltern
i = 2
While wks.Cells(i, 1) <> ""
If wks.Cells(i, 1) <> wks.Cells(i + 1, 1) Then
wks.Rows(i).Delete
ElseIf wks.Cells(i, 2) <> wks.Cells(i + 1, 2) Then
wks.Rows(i).Delete
Else
While wks.Cells(i, 1) = wks.Cells(i + 1, 1) And wks.Cells(i, 2) = wks.Cells(i + 1, 2)
wks.Rows(i + 1).Delete
Wend
i = i + 1
End If
Wend
wks.Columns.AutoFit
End Sub

Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige