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

RemoveDuplicates nach csv-Import

RemoveDuplicates nach csv-Import
01.03.2022 14:47:32
Chris
Liebe Community,
ich bin neu in der VBA Welt und zuletzt auf ein Problem gestoßen, bei dem ich nicht mehr weiterkomme. Dieses betrifft den RemoveDuplicates Befehl, angewendet auf importierte Datensätze aus einer *.csv Datei.
Bislang habe ich die csv-Datei immer manuell im Explorer geöffnet, die Spalten etc. sortiert und den Inhalt in mein Standard Workbook kopiert. Diesen Prozess wollte ich mit VBA automatisieren, was auch soweit gut geklappt hat. Die Daten werden unter eine bestehende Liste gefügt, dabei kann es passieren, dass Daten doppelt vorhanden sind. Um dieses auszuschließen möchte ich nach dem Kopiervorgang mit RemoveDuplicates die doppelten Einträge löschen. Das funktioniert aber nicht! Aus irgendeinem Grund erkennt Excel die Werte nicht als Duplikate.
Mache ich den Prozess händisch, funktioniert es einwandfrei. Sprich: Wenn ich die Daten aus derselben csv-Datei händisch kopiere und im Ziel-Worksheet einfüge, kann ich anschließend manuell über Daten/“Duplikate entfernen“ alle doppelten Einträge löschen.
Nach dem automatischen Kopieren und Einfügen sind die Zellen in der Zieldatei alle im selben Format, ich hatte zunächst gedacht es könnte daran liegen.
Ich wühle mich seit einiger Zeit durch google und komme keinen Schritt weiter.
Daher würde ich mich über Ideen/Anregungen und Hilfe sehr freuen!
Chris

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

Betreff
Datum
Anwender
Anzeige
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 15:12:35
JoWE
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 15:52:53
Chris
Anbei mein Code, ich hoffe der ist ausreichend zur Überprüfung auf Fehler.
Sub DatenAuswahl() 'Auswahl der CSV Datei / en Dim varDateipfade As Variant Dim intZaehler As Integer Dim intAnzDateien As Integer Dim lngAnzGesamt As Long varDateipfade = Application.GetOpenFilename("Datei, *.csv", , "Transaktionsdaten auswählen", , True) On Error GoTo Fehlerbehandlung intAnzDateien = UBound(varDateipfade) For intZaehler = 1 To intAnzDateien DatenAuslesen varDateipfade(intZaehler) Next Fehlerbehandlung: End Sub

Sub DatenAuslesen(varDateipfad As Variant)          'Öffnen der Datei um Anordnung an Zieldatei anzupassen
Dim intZeilenAnzahl As Integer
Workbooks.Open (varDateipfad), Local:=True
Rows("1:7").Delete
Columns("A:B").Delete
Range("A1").Value = "Buchungstag"
Range("B1").Value = "Konto"
Range("C1").Value = "Auftraggeber/Zahlungsempfänger"
Range("D1").Value = "Empfänger/Zahlungspflichtiger"
Range("E1").Value = "IBAN"
Range("F1").Value = "BIC"
Range("G1").Value = "Vorgang"
Range("H1").Value = "Betrag"
intZeilenAnzahl = LetzteZeileAdvanced(1)
Range("B2:C" & intZeilenAnzahl).Copy
Range("G2").Select
ActiveSheet.Paste
Range("B2:B" & intZeilenAnzahl).Value = "DKB"
Range("C2:F" & intZeilenAnzahl).Value = " "
Range("A2:H" & intZeilenAnzahl).Copy
End Select
ActiveWorkbook.Saved = True
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
Datenkopieren
End Sub

Sub Datenkopieren()
Dim rngKopierbereich As Range
Dim lngRowNumber As Long
ThisWorkbook.Sheets("Ausgabentracking").Activate
lngRowNumber = Range("A4").End(xlDown).Row
Range("A4").End(xlDown).Offset(1, 0).Select                             'Die Tabelle in der Zieldatei beginnt in Row 4 (Header)
ActiveSheet.Paste
' Betrag in das richtige Format überführen (Spalte H als Format Währung)
On Error Resume Next
For Each rngKopierbereich In Range("H" & lngRowNumber, "H" & LetzteZeileAdvanced(8))
rngKopierbereich.Value = rngKopierbereich.Value * 1
Next rngKopierbereich
Range("H" & lngRowNumber, "H" & LetzteZeileAdvanced(8)).Select
Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
End Sub

Sub DatenSortieren()
'RemoveDuplicates (Duplikate werden nicht erkannt!)
Range("A5:M" & LetzteZeileAdvanced(8)).RemoveDuplicates Columns:=Array(1, 7, 8), Header:=xlYes
End Sub
>

Function LetzteZeileAdvanced(intSpalte As Integer) As Long
LetzteZeileAdvanced = Cells(Cells.Rows.Count, intSpalte).End(xlUp).Row
End Function

Anzeige
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 17:00:25
Daniel
HI
für mal in der Sub DatenSortieren nur folgenden Befehl aus:

Application.Goto Range("A5:M" & LetzteZeileAdvanced(8))
und schaue, welcher Zellbereich referenziert wird.
Gruß Daniel
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 17:23:52
Chris
Hallo Daniel,
es wird bei mir genau der Bereich ausgewählt, in dem die Duplikate entfernt werden sollen. Leider erkennt Excel die neu hinzugefügten Daten aber nicht als Duplikate, obwohl inhaltlich komplett gleich... Wie gesagt, mache ich den gleichen Prozess händisch, und starte den RemoveDuplicates über die Befehlsleiste, klappt alles wunderbar. Irgendwas macht Excel beim Import aus der csv-Datei mit den Daten, sodass die sich von den bereits vorhandenen unterscheiden...
Gruß Chris
Anzeige
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 17:28:00
Chris
Ergänzung: Wenn ich die Daten nur mittels VBA kopiere und anschließend die Duplikate manuell über die Befehlsleiste entfernen möchte, klappt dies auch nicht! Irgendwas passiert beim kopieren mit den Daten denke ich, ich kann aber keine Unterschiede finden. Habe auch schon jede einzelne Spalte mittels VBA danach an die Formatierung angepasst ( Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)" / Selection.NumberFormat = "General" / Selection.NumberFormat = "DD/MM/YYYY"), aber das half auch nichts.
Ich habe auch die clv-Datei vor Auslösung des Prozesses mal in eine .xlsx gespeichert. Das selbe Problem.
VG
Anzeige
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 17:39:59
Daniel
tja, da wirst du dir die Daten halt anschauen müssen, und prüfen, ob du einen unterschied siehst.
Wir können das nicht, denn dazu brauchen wir die Datei.
kleiner Tip nur so am Rande, der jetzt nicht unbedingt was mit dem Fehler zu tun haben muss:
ich würde kopieren und einfügen im selben Makro ausführen und zwar direkt hintereinander, bevor du die Datei schließt.
Dann kannst du das Excelspezifische INHALTE EINFÜGEN (PASTESPECIAL) verwenden, das funktioniert normalerweise besser als das allgemeine .Paste
Gruß Daniel
AW: eine Musterarbeitsmappe wäre hilfreich
01.03.2022 18:53:48
Chris
Ich denke, ich habe es jetzt hinbekommen.... Folgende Dinge habe ich gemacht:
- Ich habe schon in der Quelldatei (csv) die Datenformatierung an die Zieldatei angepasst
- Ich habe das kopieren und einfügen wie du gesagt hast in ein Sub geschrieben
- Ich habe PasteFormulas genutzt! (Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False)
Frage mich nicht, was und warum zum Ziel geführt hat, aber jetzt klappt es :-)
Gruß Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige