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

Berechnung der Übereinstimmung zweier Strings

Berechnung der Übereinstimmung zweier Strings
03.02.2015 13:08:31
Patrick
Hallo zusammen,
ich habe eine Frage zur Umsetzbarkeit des folgenden Projektes.
Ausgangspunkt sind zwei Excel Dateien:
Datei 1 - 65.000 Zeilen x 6 Spalten.
Datei 2 - 245.000 Zeilen x 7 Spalten
In Datei 1 befinden sich die Überschriften I.Nr., Name, Straße, PLZ, Ort, Umsatz
In Datei 2 befinden sich die Überschriften Kd.Nr., Name, Name1, Land, PLZ, Ort, Straße + Hausnummer
Nun sollen die Daten aus Datei 2 mit I.Nr. und Umsatz aus Datei 1 vervollständigt werden,
allerdings sind nicht alle Namen (Kunden) aus Datei 1 in Datei 2 vorhanden (diese sollen dann auch nicht gepflegt werden), des Weiteren ist die Schreibweise und die Aufteilung der Namen in den Dateien oft unterscheidlich, sprich:
(Beispiel)
Datei 1: Name: "Test AG -Maschinenbau"
Datei 2: Name: "TEST AG" Name1: "MASCHINENBAU"
Es kommt aber auch vor das in Datei 2 das Feld Name1 leer ist und alles in Name steht.
Auch die Felder PLZ, Ort und Straße sind nicht immer gepflegt.
--------------
Soweit zur Ausgangssituation, nun bin ich am überlegen wie ich es am besten umsetze, bzw. ob es überhaupt machbar ist? (Speicher aufgrund der großen Datenmenge etc.)
Ich hatte mir überlegt Name und Name1 aus Datei 2 in einen String zu packen.
Dann laufe ich mit einer Schleife über jede Zeile und vergleiche die Werte "Name, PLZ, und Straße" aus Datei 1 mit "NameNeu (Name + Name1), PLZ, Straße aus Datei 2 auf prozentuale Übereinstimmung!?
Hier schon die erste Frage ob das Umsetzbar ist. Habe schon überlegt die Strings mit Split() zu zerlegen und in Arrays zu packen und dann jeden Wert aus Array1 mit dem aus Array2 zu vergleichen, wenn true dann x(Int) + 0,2 oder so. Wenn Dann am Ende der Überprüfung eine Übereinstimmung der Strings größer als 75% raus kommt, kopiere ich die gewünschten Werte (I.Nr. und Umsatz) aus Datei 1 in Datei 2.
Hat wer eine Idee wie es gehen könnte? Gibt es alternativen der Umsetzung mit Access, Java, VB.Net?
Vielen Dank und frohes Schaffen
LG Patrick

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
GIGO
03.02.2015 23:06:37
Frank
Hallo Patrick,
Das klassische Problem des 'garbage in - garbage out'. Zu so inkonsistenten Daten in solcher Menge darf man es einfach nicht kommen lassen. Anders gesagt: Das kriegst Du nie geradegebogen.
(1) Bei 65000 Datensätzen (Minimum) kommst Du vielleicht auf 95% Erfolg. Das heisst, Du musst aus den 65000 Datensätzen die 3250 heraussuchen (mittels Durchscrollen - viel Spass!), die fehlerhaft sind. Aber vielleicht sind ja auch nur 1500 durchgerutscht. Die sollten dann von Hand geändert werden. Auch wenn Du ein ganz fixer bist, 1min pro Datensatz solltest Du rechnen. Das sind 25h reine Arbeitszeit. Wieviel kannst Du pro Tag dafür aufbringen? 1h? - Macht über einen Monat nur fürs Hinterherputzen.
(2) Da Du ja jede Zeile mit jeder vergleichen musst,
macht das 65000 * 245000 = 15925000000 Vergleiche.
Ich weiss ja nicht, an was für ner Supermaschine Du sitzt, aber ich habe für ähnliche Aufgaben mit nur 5000 Datensätzen schon mehrere Minuten warten müssen. Kleiner Test:
Sub test()
Sheets(1).Cells(3, 1).Value = Now
For i = 1 To 1000000
If i > 0 Then
C = "OK"
D = LCase(C)
E = Left(D, 1)
End If
Next
Sheets(1).Cells(4, 1).Value = Now
End Sub

Dieser kleine Durchlauf mit nur 3 Stringoperationen braucht bei mir schon 1 sec. Das ganze mal ca. 16000 macht 4 h für die 15Mrd.
Ich lasse den Thread aber mal offen, vielleicht hat ja jemand noch eine Idee.
Grüsse,
Frank

Anzeige
Plausibilität
07.02.2015 17:06:34
Michael
Hallo Patrick,
ich hatte so ein ähnliches Problem und bin es so angegangen: ich habe bei jedem file eine Spalte A mit einer Nr. eingefügt: 1 für Tabelle 1 und 2 für Tabelle 2 und beide untereinander kopiert.
Dann das ganze Ding markiert (Strg-Shift-Enter markiert den Bereich mit zusammenhängenden Daten) und nach der Namensspalte sortiert. Mit meinen schlappen 5000 Datensätzen war die Sortierung in Sekundenbruchteilen erledigt.
Man könnte dann eine weitere Spalte einfügen, die ermittelt, ob je übereinanderliegende Namen identisch sind, also etwa so: =wenn(C2=C3;"ok";"") oder, an Dein Beispiel angelehnt =wenn(C2=(C3&D3);"ok";"")
Schließlich kannste die "ok"s zählen und weißt dann immerhin, was Fakt ist.
Wenn die Dinger direkt übereinander stehen, tust Dir leichter, das händisch zu bearbeiten, und Du siehst auch direkt, was aus 1 in 2 nicht vorhanden ist - hier kannst Du direkt kopieren, löschen usw., sowohl händisch als auch mit VBA. Und anhand der Zahlenspalte kannst die unerwünschten Datensätze hinterher wieder rauswerfen (einfach nach der Spalte sortieren).
So hast Du es wenigstens nicht mit 10hoch vielen Zeilen zu tun.
Ansonsten gilt natürlich das von Frank Gesagte: kostet alles Zeit ohne Ende.
Abgesehen davon wird es doch so sein, daß Firmen mehrfach vorkommen? Das schreit geradezu nach einer Datenbank oder zumindest danach, die Tabellen so zu strukturieren, wie man es mit einer DB tun würde.
Ich beneide Dich nicht. Trotzdem schöne Grüße,
Michael
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige