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

Abgleich funktioniert nicht

Abgleich funktioniert nicht
07.01.2016 09:33:10
Willi
Hallo Zusammen,
ich gleiche die Zellen zweier Spalten in zwei Tabellen ab. Von den ca. 5000 Zeilen werden einige als in Tab CSV-Datei (s.u.) nicht enthalten (in Alt-CSV) erkannt. Nach einem händischen Test stellte sich aber heraus, daß der Wert in beiden Tabellen in der entsprechenden Spalte vorkommt.
Vorgehensweise zum Verständnis:
1.) ich erstelle eine Tabelle aus diversen Quellen
2.) diese Tabelle wird als CSV Datei gespeichert
3.) diese Arbeit muß jeden Tag erfolgen, daher wird am nächsten Tag wieder eine CSV Datei erstellt und die ältere in Alt-CSV umbenannt.
4.) die ältere CSV Datei wird in eine gesonderte Tabelle einglesen
5.) nun muß abgegleichen werden, ob in Spalte 13 (M) in CSV-Datei und in Alt-CSV die Werte vorhanden sind. Beispiel: ist "CF-54C4076EG" in Spalte M in beiden Tabellen vorhanden.
Diese Abfrage erfolgt über:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Sub AAA_Diff_Vergleich()
Dim x1, y1, z1, lngZaehler As Long
Dim Zelle As Range
Dim WksU As Worksheet, WksV As Worksheet, WksW As Worksheet
Dim Kat As String, Kategorie As String
Dim c As Range
Set WksU = Worksheets("Alt-CSV")
Set WksV = Worksheets("CSV-Datei")
Set WksW = Worksheets("Differenz")
x1 = Sheets("CSV-Datei").UsedRange.SpecialCells(xlCellTypeLastCell).Row
y1 = Sheets("Alt-CSV").UsedRange.SpecialCells(xlCellTypeLastCell).Row
y1 = y1 + 1
z1 = 2
' -------------------------- Header in Differenz Tabelle kopieren
' MsgBox "Header in Differenz Tabelle kopieren"
Sheets("PS-Header").Select
Rows("1:1").Select
Selection.Copy
Sheets("Differenz").Select
Rows("1:1").Select
ActiveSheet.Paste
' -------------------------- Header in Differenz Tabelle kopieren Ende
Sheets("Alt-CSV").Select
For Each c In Range("M2:M" & x1)
c = WorksheetFunction.Trim(c)
Next
MsgBox "Trim Alt-CSV"
Sheets("CSV-Datei").Select
For Each c In Range("M2:M" & x1)
c = WorksheetFunction.Trim(c)
Next
MsgBox "Trim CSV-Datei"
' --- Herstellernummer vergleichen - CSV-Datei mit Alt-CSV vergleichen
ActiveSheet.UsedRange.EntireRow.Interior.ColorIndex = xlNone
With WksV
For lngZaehler = 2 To x1
Set Zelle = WksV.Columns(13).Find(What:=WksU.Cells(lngZaehler, 13), _   LookIn:= _
xlValues, lookat:=xlWhole)
If Not Zelle Is Nothing Then
If lngZaehler = x1 Then
'                       GoTo H_Alt
GoTo warten
End If
Else
Kat = Trim(Range("D" & lngZaehler))
Kategorie = Left(Kat, 7)
If Kategorie  "Zubehör" Then
WksV.Rows(lngZaehler).Copy WksW.Rows(z1)
Sheets("Differenz").Select
WksW.Cells(z1, 1).Select
Selection.EntireRow.Interior.ColorIndex = 6
z1 = z1 + 1
End If
End If
Sheets("CSV-Datei").Select
Set Zelle = Nothing
ActiveSheet.UsedRange.EntireRow.Interior.ColorIndex = xlNone
Next lngZaehler
End With
warten:
End Sub

Das Problem?
Es werden 4 Zellen gefunden, deren Inhalt angeblich nicht in der Alt-CSV Tabelle enthalten ist. Wären es alle ca. 5000 hätte ich einen Fehler gemacht, aber es sind immer wieder dieselben 4 (reproduzierbar) Nummern.
Wie ihr seht, bin ich schon mit einem Trim in beiden Tabellen auf die Spalte losgegangen, aber das nutzt nichts.
Leider weiß ich nicht, ob Trim nur vorweg stehende Blanks löscht oder auch nachfolgende?! Löscht es auch andere Escape Sequenzen?
Wenn ja, sieht hier irgendjemand einen Fehler, oder hat eine andere Programmlösung.
Leider muß ich das Ganze in drei verschiedenen Variationen mit unterschiedlichen Spalten und in unterschiedlicher Richtung (neu -> alt, alt -> neu) durchlaufen, so daß zwei For Schleifen soviel Zeit in Anspruch nehmen, daß ich davon bisher abgesehen habe; aber wenn nichts anderes helfen sollte, so nehme ich auch das :(.
Leider ist es so, daß gerade dieses Ergebnis die Quintessenz der ganzen fast 2000 Zeilen Programmcode ist, die ich bisher geschrieben habe. Wenn ich da keine saubere und vor allem zuverlässige Lösung finde, war die ganze Arbeit umsonst.
So bleibt mir nur:
! ! ! ! H I L F E ! ! ! !
Danke schon mal im Voraus
Willi

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abgleich funktioniert nicht
07.01.2016 11:09:03
EtoPHG
Hallo Willi,
Wenn der Fehler reproduzierbar ist, hilf uns mit einem Upload der beiden CSV-Dateien ins Forum.
Wobei du vor dem Upload die Dateien auf ca. 10 vorhandene Datensätze + die 4 nicht gefundenen reduzierst.
Am Code ist schon mal zu bemängeln, dass du mit .SELEC"T arbeitest, was extrem langsam ist und in VBA zu 99.9% vermieden werden kann. Lies dazu Wer seleketiert, denn da....
Zudem kann ich mir nicht vorstellen ,dass für einen einfachen Vergleich 2er Blätter 2'000 Codezeilen von Nöten sind. Das sind dann wohl auch 2'000 mögliche Fehlerquellen.
Gruess Hansueli

Anzeige
AW: Abgleich funktioniert nicht
07.01.2016 17:26:33
Willi
Hallo Hansueli,
Danke für die schnelle Rückmeldung. Anbei der Link zu der gekürzten xlsm. Darin sind einige ebenfalls gekürzten Datensätze und die Programmierung. Also einfach Makro starten und schon sieht man in der Tabelle Differenz das Ergebnis (Immer die Spalten M miteinander vergleichen). Überprüft man dann die herausgefiltereten Datensätze und vergleicht die mit den beiden anderen Tabellen(-spalten) so wird klar, was ich meine.
https://www.herber.de/bbs/user/102653.xlsm
Zu den 2000 Codezeilen: das beinhaltet Auslesen mehrerer Emails, Entzippen, Wegscheiben, Sichern, geeignete Daten herausfiltern (die Dateien umfassen bis zu 170.000 Datensätze) etc. Das alles nur um überhaupt erstmal eine CSV Datei zu erstellen, die meinen Anforderungen gerecht wird. Ferner müssen noch gesetzliche Vorgaben eingehalten werden.
Egal, hier geht es einfach um das sehr kuriose Ergebnis, sobald man das Makro startet.
Allen, die sich an einer Suche und Lösung beteiligen schon mal meinen ganz herzlichen Dank.
Willi

Anzeige
AW: Abgleich funktioniert nicht
08.01.2016 10:34:18
EtoPHG
Hallo Willi,
Dein Code ist völlig verquer und lässt sich nicht mal kompilieren!
Ich möchte deine anderen 1937 Codezeilen auf keinen Fall sehen, sonst bekomme ich Angstzustände ;-)
1. Du vergleichst 2 unterschiedliche Anzahl von Zeilen, stellst aber nie fest, welche Tabelle mehr Zeilen beinhaltet, wie die andere. Das ist doch essentiell für einen sauberen Vergleich.
2. Wenn ein Vergleichswert in der anderen Tabelle nicht gefunden wird, kommt eine weiterer Vergleich zum tragen, der absolut nichts mehr mit dem Ausgangswert zu tun hat und es wird die Zeile der führenden Datei ins Diff-Blatt eingetragen.
3. Das dies wohl nicht funktionieren kann ist offensichtlich. Es werden genau soviele Zeilen in das Diff-Blatt eingetragen, für die bis zum Ende der Schlaufe im Ausgangsblatt nicht gefunden wurden, aber diese Zeilen beinhalten nicht den nicht gefundenen Wert, sondern Werte aus dem Ausgangsblatt. Also läuft alles auf reinen Zufall hinaus!
Bevor du weiter programmierst, mach dich mit dem Link in Antwort 1 vertraut.
In jedes Codemodule gehört als erste Codezeile Option Explicit!
Schreibe nochmals schriftlich nieder was du genau mit was Vergleichen willst und was du als Endresultat erwartest.
Gruess Hansueli

Anzeige
AW: Abgleich funktioniert nicht
11.01.2016 18:18:42
Willi
Hallo Hansueli,
vielen Dank für den Tritt in den A... ;)
Ja, es war ein Kompilierfehler drin. Sorry.
Nach Deinen Anmerkungen habe ich das nochmal durchgetestet und habe dabei folgendes festgestellt: natürlich hast Du recht und die Programmierung kann nur daneben gehen. ABER, und das hat mich so in die Irre geführt, es ergab Ergebnisse, die in gewisserweise Sinn machten. Also was macht der geneigte Programmierer: er sucht natürlich innerhalb dieses Codes und stellt nicht das ganze Modul in Frage. Dazu braucht man eben mal einen Tritt. Nun habe ich das alles nochmal neu geschrieben und natürlich funktioniert das nun sauber. :)
Danke dafür
Willi
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige