Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1484to1488
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

Listenvergleich und zeilenweises Update

Listenvergleich und zeilenweises Update
30.03.2016 10:51:02
NicNac75
Hallo Excel-Cracks,
verzweifele gerade an der Lösung folgender Fragestellung in VBA:
Ich habe zwei Listen (in unterschiedlichen Tabellenblättern), die ich mit einander vergleichen möchte und bei Übereinstimmung zeilenweise ersetzen möchte.
Folgendes Beispiel dazu:
Liste1: (Neuwerte)
A B C D
5461 name1 straße2 PLZ1
5462 name2 straße6 PLZ2
5463 name3 straße4 PLZ8
Liste2: (Bestandswerte)
A B C D
5461 name1 straße9 PLZ3
5464 name5 straße3 PLZ5
5465 name6 straße7 PLZ7
Hier soll also in Liste 2 die erste Zeile mit den Werten aus Liste 1 überschrieben werden (d.h. Liste 1 liefert sozusagen die Updates, verbindendes Glied ist ein eindeutiger Zahlenwert (hier im Beispiel jeweils Spalte A, im Realfall aber in unterschiedlichen Spalten)).
Ich habe es mit zwei verschachtelten Schleifen versucht, aber mich total verhaspelt (von der resultierenden Laufzeit mal abgesehen, da es hier um eine große Datenmenge geht).
Kann mir jemand von Euch wieder auf den richtigen gedanklichen Pfad bringen?
Schon vorab 1000 Dank für Eure Hilfe.
beste Grüße, NicNac75

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

Betreff
Datum
Anwender
Anzeige
AW: Listenvergleich und zeilenweises Update
30.03.2016 11:26:50
ChrisL
Hi
Sub Mach()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long
Set WS1 = Worksheets("Bestandswerte")
Set WS2 = Worksheets("Neuwerte")
For iZeile = 1 To WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
If WorksheetFunction.CountIf(WS2.Columns(1), WS1.Cells(iZeile, 1)) > 0 Then
WS1.Cells(iZeile, 2) = _
WorksheetFunction.VLookup(WS1.Cells(iZeile, 1), WS2.Columns("A:D"), 2, 0)
WS1.Cells(iZeile, 3) = _
WorksheetFunction.VLookup(WS1.Cells(iZeile, 1), WS2.Columns("A:D"), 3, 0)
WS1.Cells(iZeile, 4) = _
WorksheetFunction.VLookup(WS1.Cells(iZeile, 1), WS2.Columns("A:D"), 4, 0)
End If
Next iZeile
End Sub

cu
Chris

Anzeige
AW: Listenvergleich und zeilenweises Update
30.03.2016 11:41:01
NicNac75
Hallo Chris,
besten Dank für die schnelle und vergleichsweise einfache Antwort (mir war gar nicht klar, dass die S-Verweis Funktion sich auf diesem Wege auch unter VBA nutzbar machen lässt).
Eine ergänzende Frage hätte ich aber doch:
Die reale Liste mit den Bestandsdaten enthält im Kopf noch jede Menge Kram, der tatsächliche Listenbereich ist O17:FV4016. Könnte ich WS2.Columns("A:D") auch durch WS2.Range("O17:FV4016") ersetzen?
Wenn ich den Code richtig interpretiere, dann wird hier ja über den SVerweis jede einzelne Zelle separat aktualisiert mit den Neuwerten. Da ich hier 164 Werte umfassende Zeilen habe, wäre das recht aufwendig.
Lässt sich das ggf. noch vereinfachen, indem bei einem Treffer schlicht ein ganzer Bereich kopiert und damit ersetzt wird?
Beste Grüße, NicNac75

Anzeige
AW: Listenvergleich und zeilenweises Update
30.03.2016 12:34:46
ChrisL
Hi
Anderer Ansatz (mit Vergleichs-Funktion Zeile ermitteln und Spalte 1-100 übernehmen):
Sub Mach()
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long, tempZeile As Variant
Set WS1 = Worksheets("Bestandswerte")
Set WS2 = Worksheets("Neuwerte")
For iZeile = 1 To WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
tempZeile = Application.Match(WS1.Cells(iZeile, 1), WS2.Columns(1), 0)
If IsNumeric(tempZeile) Then
WS1.Range(WS1.Cells(iZeile, 1), WS1.Cells(iZeile, 100)).Value = _
WS2.Range(WS2.Cells(tempZeile, 1), WS2.Cells(tempZeile, 100)).Value
End If
Next iZeile
End Sub
cu
Chris

Anzeige
AW: Listenvergleich und zeilenweises Update
30.03.2016 15:30:11
NicNac75
Perfekt, das ist genau der Ansatz der mir fehlte. 1000 DANK !!!!!

AW: Listenvergleich und zeilenweises Update
30.03.2016 13:05:19
Fennek
Hallo,
reicht nicht einfach beide Liste zusammen zu kopiere (in eine Spalte) und dann "Menu - Daten - Duplikate entfernen"?
Mfg

AW: Listenvergleich und zeilenweises Update
30.03.2016 15:32:16
NicNac75
Danke, Fennek. Da es sich um eine wiederkehrende Funktion in komplexerem Zusammenhang handeln soll, war eine VBA-Lösung gefragt. Die Lösung von Chris bringt genau das gewünschte Ergebnis. Aber dennoch auch danke an Dich für Deine Antwort.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige