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

Prüfen ob Datensatz schon vorhanden

Prüfen ob Datensatz schon vorhanden
18.03.2016 08:56:03
r2d2
Hallo,
ich möchte Datensätze von A nach B schaufeln und dabei doppelte Einträge vermeiden. Nun kann ich natürlich, bevor ich die Daten von A nach B kopiere, im Bereich B prüfen, ob der Datensatz schon vorhanden ist. Bei 50.000 Datensätzen dürfte das dann aber doch ein weinig dauern, wenn ich immer vorher den gesamten Bereich prüfen muß. Gibt es da eine elegante Lösung?
Hier mein bisheriges Vorgehen:
Sub kopieren_ohne_duplikate()
Dim VAR As String
For i = 1 To 50000
VAR = Sheets("QUELLE").Range("B" & i)
If Sheets("ZIEL").Range("C5:C50000")  VAR Then
Dim ZEIGER As String
Sheets("ZIEL").Activate
Cells(100000, 3).End(xlUp).Offset(1, 0).Activate
ZEIGER = ActiveCell.Row
Range("C" & ZEIGER2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  _
SkipBlanks:=False, Transpose:=False
End If
nex i
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Datensatz schon vorhanden
18.03.2016 09:20:06
Steve
Hallo r2d2,
dafür gibt es im Reiter "Daten" die Duplikatsprüfung.
Das Einfügen kannst du zunächst als Block ausführen, statt Zeile für Zeile. Dann wird der RemoveDuplicates-Befehl ausgeführt.
With Sheets("Tabelle1")
.Range("A1:B" & .Cells(.Rows.Count, "A").End(xlUp).Row). _
RemoveDuplicates Columns:=1, Header:=xlYes
End With
Die Range gibt den gesamten Bereich deiner Daten an (welche Zellen der Zeile gelöscht werden).
Columns:= gibt an welche Spalte(n) auf Duplikate geprüft werden.
Im obigen Beispiel werden also die Zellen A bis B der Zeile eines Datensatzes gelöscht, falls in A ein Duplikat auftritt.
lg Steve

Anzeige
AW: Prüfen ob Datensatz schon vorhanden
18.03.2016 09:28:30
r2d2
Nee, ich will ja nix löschen - oder geht das nicht anders?

AW: Prüfen ob Datensatz schon vorhanden
18.03.2016 09:30:10
r2d2
Dann müsste ich ja erstmal von A nach B alles rüberkopieren und dann im nächsten Schritt bei B alle doppelten löschen.
Geht das nicht anders? So dass vor dem Kopieren geprüft wird ob doppelt?

AW: Prüfen ob Datensatz schon vorhanden
18.03.2016 10:35:10
Steve
Hallo r2d2,
ja, das hatte ich bereits erwähnt, dass du den gesamten Datenblock kopieren sollst, wenn auch nicht unbedingt sehr nachdrücklich.
Wenn du nicht Zeile für Zeile kopierst sondern deinen Datenblock im ganzen ist das in Sekundenbruchteilen erledigt. Du musst nämlich wissen, jeder Zugriff auf Zellen (hier Kopiervorgang) innerhalb der Mappe bedarf einer gewissen Menge Zeit. Wenn du also Zeile für Zeile kopierst ist dein Zeitbedarf erheblich höher, als ein einziger Zugriff auf einen Bereich. Bevor ein Besserwisser ankommt und sagt: "aber bei 100.000 Zellen ist der Zeitanteil für den Zugriff ein klein wenig höher als bei einer Zelle" - um Millisekunden wollen wir hier nicht streiten. Denn T = 100.000 * X Millisekunden oder T = 1 * X + großzügige 100 Millisekunden sind trotzdem ein riesiger Unterschied.
Den eingefügten Datenblock kannst du dann auf doppelte Werte prüfen, was mit Remove-Duplicates als Standard-Funktion ebenfalls nur Sekundenbruchteile benötigt. Selbstgebastelte Schleifen die Zeile für Zeile durchgehen können da einfach nicht mithalten. Zudem ermöglicht der Befehl eine Prüfung über mehrere Spalten. Ein kleines Beispiel: "Nur wenn Artikelnummer (Spalte A), Lieferscheinnummer (Spalte D) und Lieferdatum (Spalte B) identisch sind, dann entferne den kompletten Datensatz (Zeile)".
Ein kleiner Tip zur Performance noch: Bildschirmaktualisierung und Formelberechnung ausschalten wirkt Wunder. Kannst es ja erstmal bei deinem Code ausprobieren und über den Unterschied staunen. Aber nicht vergessen die Formelberechnung am Ende des Makros wieder einzuschalten (was gern beim Programmabbruch durch Fehler in der Programmierphase vergessen wird). Ich spreche hierbei aus Erfahrung wenn ich sage, dass es Momente gibt in denen Leute verzweifelt sind, weil ihre Formeln nicht mal mehr 1+1 hinkriegen.
'Aus
Application.Screenupdating = False
Application.Calculation = xlManual
'Ein
Application.Screenupdating = True
Application.Calculation = xlAutomatic

lg Steve

Anzeige
AW: Prüfen ob Datensatz schon vorhanden
18.03.2016 12:53:42
r2d2
Ok, danke.

AW: Prüfen ob Datensatz schon vorhanden
18.03.2016 13:06:04
Daniel
Hi
wenn du wirklich nur die benötigten Zeilen kopiern willst und das sehr schnell gehen soll, müsstest du so vorgehen:
1. Zielbereich nach der Spalte mit dem Vergleichswert aufsteigend sortieren
2. im quellbereich eine Hilfsspalte einfügen, welche mit Hilfe des SVerweises prüft, ob der Vergleichswert in der Zieltabelle vorhanden ist.
die Formel sieht in etwa so aus:
=Wenn(SVerweis(Vergleichswert aus Quelle;Spalte mit Vergleichswerten im Ziel;1;Wahr)  = Vergleichswert Quelle;"x";1) 
3. Quelltabelle nach dieser Hiflsspalte sortieren (vorher ggf in der Hilfsspalte die Formeln durch Werte ersetzen
4. alle Zeilen, die in der Hilfsspalte eine 1 haben, in die Zieltablle kopieren.
du kannst diese Zeilen über die SpecialCells-Methode gezielt auswählen.
Gruß Daniel
Anzeige

130 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige