Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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

Anzeige

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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Datensätze in Excel auf Duplikate prüfen


Schritt-für-Schritt-Anleitung

Um Datensätze in Excel auf Duplikate zu prüfen, kannst du folgende Schritte befolgen:

  1. Datenblock kopieren: Anstatt die Daten Zeile für Zeile zu kopieren, solltest du den gesamten Datenblock auf einmal kopieren. Das spart Zeit und verbessert die Performance.

    Sub kopieren_ohne_duplikate()
       Dim VAR As String
       Dim i As Long
       For i = 1 To 50000
           VAR = Sheets("QUELLE").Range("B" & i)
           If Application.WorksheetFunction.CountIf(Sheets("ZIEL").Range("C5:C50000"), VAR) = 0 Then
               Sheets("ZIEL").Cells(100000, 3).End(xlUp).Offset(1, 0).Value = VAR
           End If
       Next i
    End Sub
  2. Duplikatsprüfung durchführen: Verwende die Funktion RemoveDuplicates, um doppelte Einträge zu entfernen, nachdem du die Daten kopiert hast:

    With Sheets("ZIEL")
       .Range("A1:B" & .Cells(.Rows.Count, "A").End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlYes
    End With
  3. Hilfsspalte nutzen: Wenn du nur die relevanten Zeilen kopieren möchtest, füge eine Hilfsspalte in der Quelltabelle ein, um zu prüfen, ob der Wert in der Zieltabelle vorhanden ist:

    =WENN(SVERWEIS(A1;ZIEL!C:C;1;WAHR)=A1;"x";"1")

Häufige Fehler und Lösungen

  • Fehler: Typenunterschiede beim Vergleich in VBA.

    • Lösung: Stelle sicher, dass die Datentypen übereinstimmen. Verwende CStr() oder CInt() zur Konvertierung.
  • Fehler: Die RemoveDuplicates-Funktion entfernt ungewollt Daten.

    • Lösung: Achte darauf, dass du die korrekten Spalten angibst, um nur die gewünschten Duplikate zu entfernen.

Alternative Methoden

  • Verwendung von COUNTIF: Du kannst auch die COUNTIF-Funktion verwenden, um zu prüfen, ob ein Wert in einer bestimmten Spalte bereits vorhanden ist:

    =COUNTIF(ZIEL!C:C, A1) > 0
  • VBA-Skripte: Wenn du häufiger mit großen Datensätzen arbeitest, kann ein VBA-Skript, das die Duplikatsprüfung automatisiert, Zeit sparen.


Praktische Beispiele

  1. Duplikate in einer Liste finden: Wenn du eine Liste von Kunden hast und sicherstellen willst, dass keine doppelten Einträge vorhanden sind, nutze die oben genannten Methoden.

  2. Eingabevalidierung: Du kannst eine Eingabevalidierung nutzen, um sicherzustellen, dass beim Hinzufügen neuer Daten keine Duplikate erstellt werden.


Tipps für Profis

  • Aktiviere die Bildschirmaktualisierung und die automatische Berechnung erst am Ende deines Makros, um die Performance zu optimieren:

    Application.ScreenUpdating = False
    Application.Calculation = xlManual
    ' Dein Code hier
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
  • Nutze Array-Methoden in VBA, wenn du mit sehr großen Datensätzen arbeitest, um die Verarbeitungsgeschwindigkeit zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob ein Wert in einer anderen Tabelle vorhanden ist? Verwende die SVERWEIS-Funktion oder die COUNTIF-Funktion, um zu prüfen, ob der Wert in der Zieltabelle vorhanden ist.

2. Was ist die beste Methode zur Duplikatsprüfung in Excel? Die Verwendung von RemoveDuplicates zusammen mit einer Hilfsspalte ist oft die effektivste Methode, insbesondere bei großen Datensätzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige