Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
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
Inhaltsverzeichnis

Vergleich von zwei Tabellen

Vergleich von zwei Tabellen
29.10.2019 16:38:10
zwei
Hallo zusammen,
nach mehreren Versuchen wende ich mich hier an das Forum.
Ich suche nach einer Möglichkeit zwei Tabellen miteinander zu vergleichen.(gibt es genug Beispiele, keins passt)
Hierbei besteht die Gemeinsamkeit darin, dass in der Spalte A eine unverwechselbare ID zugeordnet ist.
Alles andere kann sich unterscheiden.
Ich möchte nun, dass die Daten der Tabelle 1 mit den Daten der Tabelle 2 vergleichen werden.
Hierbei soll die ID in der Tabelle 2 gesucht werden und abgeglichen werden.
Tabelle 2 kommt von einem externen Kunden und wurde von ihm mit Daten gefüllt.
Das bisher größte Problem, die ID aus Tabelle 2 kann: vorhanden, vorhanden an anderen Stelle in der Spalte, oder gar nicht vorhanden sein.
Bisher geschafft habe ich:
Zahlen alle aufsteigend sortieren (um das Chaos einzugrenzen)
Sub Sortieren()
Range("A2:AX1000").Sort Key1:=Range("A3"), Header:=xlYes, order1:=xlAscending
End Sub
Die Msb Box wo ich nacher eine Ausgabemeldung einbauen will:
Sub For_Each_Worksheet()
Dim meinblatt As Worksheet
For Each meinblatt In Worksheets
'Hier kommt die Anweisung herein
MsgBox meinblatt.Name
Next meinblatt
End Sub
Aus einer anderen Quelle habe ich nun den Code verwendet:
Sub Vergleichen()
Dim vRow As Variant
Dim lRow As Long, lRowT As Long
Dim bln 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, 4). _
Value
End If
lRow = lRow + 1
Loop
Application.DisplayStatusBar = bln
Application.StatusBar = False
Worksheets("Tabelle3").Activate
End Sub
Das funktioniert partiell gut.
Heraus kommt, alle Begriffe die gleich sind werden geordnet. Hierbei werden aber nur die Werte aus der Spalte D berücksichtigt und alle Werte die gleich sind werden ausgegeben.
Ab hier reichen meine Excel VBA Kentnisse nicht mehr weit genug um die Code oben anzupassen.
Ich möchte in der Tabelle 3 alle Sachen ausgeben lassen die verschieden sind.
Die Zeilen reichen recht weit (ax aufwärts). das Programm möchte ich so konstruieren, dass möglichst nicht nur ich damit arbeiten kann sondern auch meine Kollegen.
ich danke

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
29.10.2019 17:21:44
Klexy
Wie sollen die Unterschiede in Blatt 3 ausgegeben werden?
Ich vermute, in Blatt 3 nur die IDs, die Unterschiede aufweisen?
Sind die Spalten(namen) in Blatt 1 und 2 identisch?
Sollen die Unterschiede in der gleichen Spalte ausgegeben werden, wo sie auftreten? Also wenn in Spalte X dann auch in Spalte X?
Soll nur der Wert aus Blatt 1 oder nur der aus Blatt 2 oder alle beide ausgegeben werden?
Welche Art von Werten sind in den Zellen? Zahlen, Datume, Text, vielText?
AW: Nachfrage
30.10.2019 09:24:59
Arno
Danke der Nachfrage,
ich habe das ganze mal soweit es ging von sensiblen Daten befreit und hochgeladen:
https://www.herber.de/bbs/user/132864.xlsx
In tabelle 3 sollen die Unterschiede ausgegeben werden. Dies soll anhand der ID geschehen. Sprich wenn in Tabelle 1 etwas zugeordnet ist muss dies in Tabelle 2 auch genau so vorhanden sein, die Stelle ist dabei egal. Sobald es Abweichungen gibt soll dies ausgegeben werden. Maßgeblich hierbei sollen die Daten aus Tabelle 1 sein, also Daten Tabelle 1 haben Vorrang.
Super wäre es natürlich wenn die Differenz ausgegeben werden könnte die besteht, aber das wäre ein zweiter Schritt
Anzeige
AW: Nachfrage
30.10.2019 14:02:59
Klexy
Die Spalten haben alle keinen Spaltenkopf?
Und was ist mit den Antworten auf meine explizit gestellten Fragen?
AW: Nachfrage
30.10.2019 14:20:30
Arno
Danke der Nachfrage, ich habe es versucht aufzuarbeiten:
Wie sollen die Unterschiede in Blatt 3 ausgegeben werden?
Als Datei mit dem gleichen Format, ID in Spalte 1, andere Überschriften in den entsprechenden Spalten, ist aber nicht so wichtig wie es aussieht. Wichtiger ist der funktinierende Abgleich.
Ich vermute, in Blatt 3 nur die IDs, die Unterschiede aufweisen?
Die ID ja, zusätzlich mit den in der Spalte der ID enthaltende Information( ID in A 84 weist Unterschiede auf, also Zeile A 84 ausgeben)
Sind die Spalten(namen) in Blatt 1 und 2 identisch?
Ja
Sollen die Unterschiede in der gleichen Spalte ausgegeben werden, wo sie auftreten? Also wenn in Spalte X dann auch in Spalte X?
Ja, wenn möglich wäre das am besten
Soll nur der Wert aus Blatt 1 oder nur der aus Blatt 2 oder alle beide ausgegeben werden?
Was wäre möglich? Ich teste gerade ein Modul welches die Unterschiede heraus gibt, komme aber mit der Länge der Zeile hier nicht zurande(zu lang zerschießt alles)
Welche Art von Werten sind in den Zellen? Zahlen, Datum, Text, viel Text?
In den Zellen ist ähnlich wie in der Tabelle entweder kurztext oder eine Zahl (x,xxxx). Kein Datum o.ä.
Anzeige
AW: Nachfrage
31.10.2019 12:00:42
Klexy
Das sollte helfen:
Sub Zwei_Blätter_vergleichen_und_in_Blatt_3_dokumentieren()
Dim BlattNam1 As String, BlattNam2 As String, BlattNam3 As String
Dim Blatt1 As Worksheet, Blatt2 As Worksheet, Blatt3 As Worksheet
Dim IDSpalte1 As Range, IDSpalte2 As Range, LängeBlatt1 As Long, BreiteBlatt1 As Long
Dim IDNummer1 As Long, IDZeile2 As Variant, z As Range, y As Range
Dim Zellinhalt1 As String, Zellinhalt2 As String, ZeileBlatt3 As Long
BlattNam1 = "Tabelle1"
BlattNam2 = "Tabelle2"
BlattNam3 = "Tabelle3"
Set Blatt1 = Sheets(BlattNam1)
Set Blatt2 = Sheets(BlattNam2)
Set Blatt3 = Sheets(BlattNam3)
LängeBlatt1 = Blatt1.Range("A100000").End(xlUp).Row
BreiteBlatt1 = Blatt1.UsedRange.Columns.Count
Set IDSpalte1 = Blatt1.Range(Blatt1.Cells(1, 1), Blatt1.Cells(LängeBlatt1, 1))
For Each z In IDSpalte1
If z.Value = "" Or IsNumeric(z.Value) = False Then
Else
IDNummer1 = z.Value
On Error GoTo IDNICHTvorhanden
IDZeile2 = ActiveWorkbook.Sheets(BlattNam2).Columns(1).Find(What:=IDNummer1, _
After:=Blatt1.Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:= _
False).Row
GoTo NächsteID
Resume NächsteID
NächsteID:
For Each y In Range(Blatt1.Cells(z.Row, 1), Blatt1.Cells(z.Row, BreiteBlatt1))
If y.Value = Blatt2.Cells(IDZeile2, y.Column) Then
Else
If Blatt3.Range("A1").End(xlDown).Value  IDNummer1 Then
Blatt3.Range("A1").End(xlDown).Offset(1, 0).Formula = IDNummer1
Else
End If
ZeileBlatt3 = Blatt3.Range("A1").End(xlDown).Row
Blatt3.Cells(ZeileBlatt3, y.Column).Formula = _
Blatt1.Cells(z.Row, y.Column).Formula & Chr(10) & Blatt2.Cells(IDZeile2, y. _
Column).Formula
End If
Next y
GoTo IDvorhanden
IDNICHTvorhanden:
Resume IDvorhanden
IDvorhanden:
On Error GoTo 0
End If
Next z
End Sub

Anzeige
AW: Nachfrage
31.10.2019 12:31:00
Arno
dankesehr,
leider tut sich bei mir gar nichts wenn ich das laufen lassen...=(
Eingefügt als Modul(so wie die anderen Codes vorher auch).
Was mache ich falsch?
AW: Nachfrage
31.10.2019 18:43:44
Klexy
Sorry, hatte was vergessen:
Trag in Blatt 3, Zeile 2 die Kopfzeile ein.
Trag in Blatt 3, Zelle A1 folgende Formel ein:
=ZÄHLENWENN(A2:A100000;"")-1
Diese Formel ziehst du dann in Zeile 1 nach rechts bis zur letzten Spalte. Sie zeigt dir, ob und wieviele Unterschiede es in der jeweiligen Spalte gibt.
AW: Nachfrage
04.11.2019 09:15:49
Arno
Guten morgen,
danke des langen Wochenendes komme ich erst jetzt dazu es zu testen.
Ich habe testweise Kopfzeilen hinzu gefügt oder weg gelassen.
Leider passiert in tabelle 3 nichts.
Müssen die Kopfzeilen in einem bestimmten Muster benannt sein?
Fehlt hierbei ein "print" Befehl für Blatt 3 als Ausgabe?
Anzeige

297 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige