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

VBA: zwei Sheets vergleichen und Daten kopieren

VBA: zwei Sheets vergleichen und Daten kopieren
05.07.2016 10:39:43
jam
Hallo zusammen,
ich hoffe, ihr könnt mir helfen.
Ich benötige für folgendes Vorhaben eine vba Lösung:
Es gibt in einer Datei zwei Tabellenblätter ( "Altdaten" und "Neudaten"), die ich gerne vergleichen möchte, dabei sollen die neuen Datensätze aus "Neudaten", die es noch nicht gibt ins Blatt "Altdaten" kopiert werden.
Für den Vergleich wird die Spalte B genommen ("Inventarnummer"). Gibt es also die Inventarnummer schon im Blatt "Altdaten" darf der ganze Datensatz nicht editiert bzw. kopiert werden. Gibt es die Inventarnr noch nicht, dann soll der komplette Datensatz ( bestehend aus Spalte A bis L ) ins Blatt "Neudaten" kopiert werden.
Als Bonbon wäre es schön, wenn die neuen Datensätze im Blatt "Altdaten" mit dem Vermerk "Neu" gekennzeichnet werden
( in Spalte M).
Vielen Dank für eure Unterstützung. Ich wäre für jeden Lösungsansatz wirklich sehr dankbar.
Gruß

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: zwei Sheets vergleichen und Daten kopieren
05.07.2016 12:10:45
Werner
Hallo,
probier mal das. Aber bitte mit einer Kopie deiner Arbeitdatei, ich könnte nicht gegen, habe kurz mit dem Tablet geschrieben.
Sub Pruefen ()
Dim loLetzte As Long
Dim loLetzte1 As Long
Dim i As Long
Dim j As Long
Dim z As Long
loLetzte = Sheets("Altdaden").Cells(RowsCount, 2).End(xlUp).Row
loLetzte1 = Sheets("Neudaten").Cells(Rows.Count, 2).End(xlUp).Row
z = loLetzte + 1
For i = 2 To loLetzte
For j = 2 To loLetzte1
If Sheets("Altdaden").Cells(i, 2) = Sheets("Neudaten").Cells(j, 2) Then
With Sheets("Neudaten")
.Range(.Cells(j, 1), .Cells(j, 12)).Copy Sheets("Altdaden").Cells(z, 1)
Sheets("Altdaden").Cells(z, 13) = "Neu"
End With
z = z + 1
End If
Next j
Next i
End Sub
Gruß Werner

Anzeige
AW: VBA: zwei Sheets vergleichen und Daten kopieren
05.07.2016 13:04:46
jam
Hallo Werner,
vielen Dank für deine Hilfe. Ich bekomme leider einen "Laufzeitfehler 1004 - Anwendungs oder objektdefinierter Fehler".
Die fett markierte Zeile wird im debug Modus gelb angezeigt. An einer falschen Formatierung der Spalte B scheint es nicht zu liegen....
Sub Pruefen ()
Dim loLetzte As Long
Dim loLetzte1 As Long
Dim i As Long
Dim j As Long
Dim z As Long
loLetzte = Sheets("Altdaden").Cells(RowsCount, 2).End(xlUp).Row
loLetzte1 = Sheets("Neudaten").Cells(Rows.Count, 2).End(xlUp).Row
z = loLetzte + 1
For i = 2 To loLetzte
For j = 2 To loLetzte1
If Sheets("Altdaden").Cells(i, 2) = Sheets("Neudaten").Cells(j, 2) Then
With Sheets("Neudaten")
.Range(.Cells(j, 1), .Cells(j, 12)).Copy Sheets("Altdaden").Cells(z, 1)
Sheets("Altdaden").Cells(z, 13) = "Neu"
End With
z = z + 1
End If
Next j
Next i
End Sub
Hast du eine Idee?
Danke.

Anzeige
AW: VBA: zwei Sheets vergleichen und Daten kopieren
05.07.2016 13:09:36
baschti007
loLetzte = Sheets("Altdaden").Cells(RowsCount, 2).End(xlUp).Row
der . fehlt bei RowsCount = Rows.Count

AW: VBA: zwei Sheets vergleichen und Daten kopieren
05.07.2016 13:10:11
Werner
Hallo,
da ist mir ein Punkt abhanden gekommen.
Muss Rows.Count heißen.
Gruß Werner

AW: VBA: zwei Sheets vergleichen und Daten kopieren
05.07.2016 14:31:04
jam
Hallo Werner,
danke dir - der Laufzeitfehler ist weg, aber der Vergleich mit der Spalte B ( Inventarnummer) scheint noch nicht richtig zu passen. Es werden trotzdem Inventarnummern bzw. der Datensatz kopiert, die
es bereits im Blatt "Altadten" gab. Somit habe ich quasi in der Spalte B Dubletten.
Es sollen ja keine Datensätze rüberkopiert werden, wenn es die Inventarnummer schon unter "Altdaten" gibt.
Sorry, für die Umstände.
Kannst du dir das nochmal anschauen?

Anzeige
AW: Sorry
05.07.2016 14:45:05
Werner
Hallo,
mein Fehler, ich kopiere ja wenn gleich und nicht wenn ungleich.
Mach hier aus dem = ein
If Sheets("Altdaden").Cells(i, 2)  Sheets=Sheetaten").Cells(j, 2) Then
Gruß Werner

AW: Sorry
05.07.2016 15:34:26
jam
Werner, sorry...aber jetzt wird der ganze Datenblock aus "Neudaten" zig mal in "Altdaten" kopiert,
so dass ich fast 100.000 Datensätze in dem Tabellenblatt habe....
Es werden also die enstprechenden Datensätze nicht nur einmal kopiert sondern mehrfach.

AW: Sorry
05.07.2016 15:48:47
baschti007
Vielleicht so jam ?
Sub Vergleich()
Dim zells As Range
Dim x As Long
Dim rng As Range
Dim lastn As Long
Dim lasta As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets("Neudaten")
Set ws2 = Worksheets("Altdaten")
lastn = ws1.Cells(1048576, 2).End(xlUp).Row
lasta = ws2.Cells(1048576, 2).End(xlUp).Row
Set objDic = CreateObject("Scripting.Dictionary")
Dim v, e
With ws2.Range("B2:B" & lasta)
v = .Value
End With
For Each e In v
If Not objDic.Exists(e) Then objDic.Add e, e
Debug.Print e
Next
Set rng = ws1.Range("B2:B" & lastn)
With ws2.Cells.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
ws2.Cells.Columns(13).Clear
For Each zells In rng
lasta2 = ws2.Cells(1048576, 2).End(xlUp).Row
If Not objDic.Exists(zells.Value) Then
ws1.Range("A" & zells.Row & ":" & "L" & zells.Row).Copy ws2.Range("A" & lasta2 + 1)
ws2.Range("A" & lasta2 + 1 & ":" & "L" & lasta2 + 1).Interior.Color = 5296274
ws2.Range("M" & lasta2 + 1) = "NEU!!!!"
End If
Next
End Sub

Anzeige
AW: Sorry
05.07.2016 16:16:49
jam
Hallo baschti007,
auch dir danke für deinen Ansatz, aber hier werden wieder die Datenätze von Blatt "Neudaten" in "Aldaten" kopiert ohne das Spalte B verglichen wird.
Vielleicht hilft ein Beispiel:
Ich möchte, dass der Datensatz mit der Inventarnummer 789 in "Altdaten" kopiert wird, der Datensatz
mit der Inventarnummer 123 allerdings nicht.
Tabelle "Altdaten":
Farbe..Inventarnummer..Artikelnr..Kennzeichen
rot.........123............B231......5
blau........456............C234......6
Tabelle "Neudaten":
Farbe...Inventarnummer..Artikelnr..Kennzeichen
rot..........123............B435......0
blau.........789............k654......2
Ich danke euch sehr für eure Bemühungen.

Anzeige
AW: Sorry
05.07.2016 16:17:07
jam
Hallo baschti007,
auch dir danke für deinen Ansatz, aber hier werden wieder die Datenätze von Blatt "Neudaten" in "Aldaten" kopiert ohne das Spalte B verglichen wird.
Vielleicht hilft ein Beispiel:
Ich möchte, dass der Datensatz mit der Inventarnummer 789 in "Altdaten" kopiert wird, der Datensatz
mit der Inventarnummer 123 allerdings nicht.
Tabelle "Altdaten":
Farbe..Inventarnummer..Artikelnr..Kennzeichen
rot.........123............B231......5
blau........456............C234......6
Tabelle "Neudaten":
Farbe...Inventarnummer..Artikelnr..Kennzeichen
rot..........123............B435......0
blau.........789............k654......2
Ich danke euch sehr für eure Bemühungen.

Anzeige
AW: Sorry
05.07.2016 16:40:02
Bastian
Lad mal eine Beispiel mappe hoch damit geht es immer besser =)

AW: Sorry
05.07.2016 22:14:23
jam
Hallo Bastian,
ich glaube ich habe die Ursache gefunden, warum dein Makro bei mir nicht richtig läuft. Die Spalte B aus dem Blatt "Neudaten" hat wohl eine falsche Formatierung.
Ich importiere die neuen Daten mit einem anderen Makro aus einer Access DB.
Die Inventarnummern in Spalte B haben nach dem Import das grüne Merkzeichen (als Text gespeicherte Zahl). Leider reicht es nicht die Spalte bzw. die Nummern entsprechend zu formatieren, sondern ich muss in jeder Zelle einen Doppelklick machen, so dass die Zahl bzw. die einzelne Inventarnr nach rechts springt. Erst wenn ich dass mache, funktioniert auch das Makro wie gewünscht. Das klingt komisch ist aber wirklich so. Ich kann aber nicht bei mehreren hundert Datensätze erst überall einen Doppelklick machen. Habt ihr dafür auch eine Lösung?

Anzeige
AW: Sorry
06.07.2016 00:31:18
jam
Hallo Sebastian, Hallo Werner,
ich wollte gerade einen Haken an das Thema machen,(das Formatproblem ist Dank Werner auch behoben) als mir aufgefallen ist, dass ich etwas gravierendes vergessen habe.
Kann man noch folgende Anforderung in das Script einbauen-also den Gegenabgleich:
Wenn es die Inventarnummer aus dem Blatt "Altdaten" nicht im Blatt "Neudaten" gibt, dann lösche den ganzen Datensatz aus "Altdaten" ( Spalte A -AM).
Entschuldigt bitte, dass ich eure Hilfe so in Anspruch nehme und hoffe das ich eure Geduld nicht überstrapaziere. Ihr habt mir bis jetzt so toll geholfen....
Gruß
jam

Anzeige
AW: Sorry
06.07.2016 08:03:09
baschti007
Ich muss dir sagen, ich bin auch nicht so wirklich der, der Ahnung hat ich Google auch nur und kombiniere die Bausteine musst du auch mal testen funktioniert ganz gut =D
Aber guck mal ob das geht ^^
Ähm wirklich Spalte a-am ? ich habe nun die ganze Zeile gelöscht das ist einfacher ...
https://www.herber.de/bbs/user/106788.xlsm
GRuß Basti

AW: DICKES DANKE !!!!
06.07.2016 10:14:00
jam
Hallo Basti,
das ist doch super! Vielen Dank für deine\eure Hilfe. Echt klasse !
Gruß
jam

Kein Ding
06.07.2016 12:28:00
baschti007
Kein Ding =D Übung macht den Meister oder so was ;)

Anzeige
AW: Sorry
05.07.2016 22:14:04
Werner
Hallo,
liegt daran, dass das absoluter Blödsinn ist, was ich dir da zusammen geschrieben habe. Das kann so gar nicht gehen.
Sorry
Werner

AW: Sorry
05.07.2016 22:21:35
jam
Hallo Werner
kein Problem, das Makro von Bastian ist schon super und würde auch funktionieren-nur muss ich leider jede einzelne Zelle in der Spalte B doppelklicken, da die wohl falsch formatiert sind. Erst dann funktioniert das Makro. Die ganze Spalte als Zahl formatieren bringt nichts-ich muss wirklich doppelklicken. Komisch...
danke dir trozdem für deine Bemühungen

AW: Textzahlen
05.07.2016 22:49:17
Werner
Hallo,
ein neuer Versuch der Hilfe.
nach dieser Codezeile
lasta = ws2.Cells(1048576, 2).End(xlUp).Row
noch das hier rein
With ws1.Range("B2:B" & lastn) 'in B1 Überschrift, Zahlen ab B2, ggf. ändern
.NumberFormat = General
.Value = .Value
Gruß Werner

AW: Textzahlen
06.07.2016 00:03:23
jam
Hallo Werner,
vielen Dank - das hilft sehr.

AW: Gerne u. Danke für die Rückmeldung. o.w.T
06.07.2016 00:06:58
Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge