Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1196to1200
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

Zwei Tabellen abgleichen

Zwei Tabellen abgleichen
Lemmi
Hallo zusammen,
ich möchte eine Tabelle mit einer zweiten Tabelle vergleichen und vorhandene Einträge übertragen.
Zuerst möchte ich die zuvergleichenden Tabellen auswählen können. In der Beispieldatei soll die "Tabelle alt Referenz" mit der "Tabelle neu" verglichen werden.
https://www.herber.de/bbs/user/73105.xls
Nach der Auswahl der zuvergleichenden Tabellen soll überprüft werden, ob die Kenn- Nr. Spalte (Spalte E) in beiden Tabellen den gleichen Inhalt haben.
Ist wie im Beispiel das Feld (E6) in beiden Tabellen die "1" vorhanden, so sollen die Inhalte von Spalte P bis U übertragen werden! (1; Hallo; Ihr, ich;Hallo; Ihr, ich;)
Ist die Kenn- Nummer nicht vorhanden, so wird/ so kann kein Abgleich stattfinden! Alles bleibt bestehen (Beispiel Tabelle neu ; Einträge ab P9: 1111111111…..)
Ergebnis: Rabelle Resultat
Kann das über ein Makro gelöst werden?
Gruß
Lemmi

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zwei Tabellen abgleichen
17.01.2011 16:58:36
Christian
Hallo Lemmi,
... im Prinzip so:
solange wie in deiner Vorlage kene Formeln enthalten sind und in Spalte E nur ganze Zahlen stehen...
Die Tabellennamen stehen hier bei "Set wks1" bzw. "Set wks2"
Option Explicit
Sub MergeData()
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim wks3 As Worksheet
Dim hshID As Object
Dim i&, lngId&, vntKey
Set hshID = CreateObject("Scripting.Dictionary")
Set wks1 = ThisWorkbook.Sheets("Tabelle alt Referenz")
Set wks2 = ThisWorkbook.Sheets("Tabelle neu")
With wks1
For i = 6 To .Cells(.Rows.Count, 5).End(xlUp).Row
lngId = .Cells(i, 5).Value
hshID(.Cells(i, 5).Value) = .Cells(i, 16).Resize(, 21).Value
Next
End With
With wks2
For i = 6 To .Cells(.Rows.Count, 5).End(xlUp).Row
lngId = .Cells(i, 5).Value
If Not hshID.Exists(lngId) Then
hshID(.Cells(i, 5).Value) = .Cells(i, 16).Resize(, 21).Value
End If
Next
End With
With ThisWorkbook
Set wks3 = .Sheets.Add(, .Sheets(.Sheets.Count))
End With
i = 0
With wks3
For Each vntKey In hshID.Keys
.Cells(i + 6, 5) = vntKey
.Cells(i + 6, 16).Resize(, 21).Value = hshID(vntKey)
i = i + 1
Next
.Cells(6, 5).Resize(i, 32).Sort _
Key1:=.Cells(6, 5), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub

gruß
Christian
Anzeige
AW: Zwei Tabellen abgleichen
17.01.2011 20:21:06
Lemmi
Hallo Christian,
leider streigt das Makro bei mir in Abschnitt:
mit Laufzeitfehler 13 ___in___ lngId = .Cells(i, 5).Value
....kann man auch in Spalte E Zalhen und Buchstaben bzw. Zahl/ Bustabe einbinden ?
Z. B.
123 ABC
1A2_B_2_3C
Gruß
Lemmi
AW: Zwei Tabellen abgleichen
18.01.2011 09:59:48
Christian
hallo,
ja, deklariere "lngId" nicht als Long wie in meinem Bsp sondern als Variant.
In diesem Fall würde ich auch die Variable in "vntId" umbenennen.
Gruß
Christian
AW: Zwei Tabellen abgleichen
18.01.2011 19:44:57
Lemmi
Hallo Christian,
...das heißt? ...leider bin ich nicht mit VBA vertraut.
Wie würde der Code dann aussehen?
Gruß
Lemmi
Anzeige
statt "lngId&" nur "lngId" ...
18.01.2011 20:12:48
Christian
in der 5 Zeile nach Sub MergeData(), Lemmi.
das "&" ist ein Kurzzeichen für "Long" (nur ganze Zahlen).
Wenn du anschließend im gesamten Code "lngId" durch "vntId" ersetzt (Strg+H), entspricht das auch wieder der Notation - somit weiß man bei "vnt.." dass es sich um einen Variant handelt, bei "lng.." um einen Long (bei dem Counter "i" bin ich da auch nicht ganz sauber, aber es ist üblich Counter mit i, j, k, ... zu bezeichnen).
Mehr hierzu findest du im Netz unter "VB Notation".
Gruß
Christian
AW: statt "lngId&" nur "lngId" ...
19.01.2011 13:29:08
Lemmi
Hallo Christian,
ich habe das Makro ans laufen bekommen! Vielen Dank!
...aber...
Resultiernd aus "Tabelle alt Referenz" und "Tabelle neu" entsteht eine weitere Tabelle, dass würde ich gerne vermeiden.
Ich würde gerne nur die "Tabelle neu" mit den Inhalten von "Tabelle alt Referenz" füllen.
Die nummerische Reihenfolge der "Tabelle neu" soll erhalten bleiben. Es soll keine sortierung durchgeführt werden.
Kann't Du das noch anpassen!
Gruß
Lemmi
Anzeige
wenn ich dich richtig verstehe, Lemmi ...
19.01.2011 22:26:05
Christian
... und du was lernen willst, dann schlage ich folgendes Schema vor:
- durchlaufe die Spalte E in "Tabelle neu" von Zeile 6 bis letzte Zeile mit Eintrag
- suche nach dem jeweilgen Eintrag in "Tabelle alt". Siehe hierzu das Beispiel in der VBA Hilfe zu "Find"
- wenn Eintrag in "Tabelle alt" existiert, dann schreibe die Werte dieser Zeile in ein Array - siehe mein Bsp-Code mit assoziatives Array, auch bekannt als Dictionary oder auch als Hash.
- sonst: schreibe die Werte von "Tabelle neu" in den Hash.
- anschließend werden die Keys und Items des Hashes in eine Tabelle geschrieben (ist in meinem Code so 1:1 vorhanden), ob in eine neue oder vorhandene Tabelle ist erst mal nebensächlich, das lässt sich ja leicht anpassen.
zugegeben, bei "VBA bescheiden" wahrscheinlich nicht ganz einfach - aber man wächst ja mit den Aufgaben ...
Gruß
Christian
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige