Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1324to1328
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

String-Suchalgorithmus

String-Suchalgorithmus
03.08.2013 15:13:09
Taddel
Hallo Forenmitglieder :)
Ich habe mich in den letzen Monaten viel mit VBA beschäftigt. In dem Forum habe ich viele hilfreiche Beiträge gefunden.
Nun habe ich ein Problem, für das ich noch keine Lösung finden konnte. Ich habe zwei Tabellen A und B mit Namen. Tabelle A wird aus einer csv-Datei in Excel erstellt. Anschließend muss ich überprüfen, ob für jeden Eintrag aus Tabelle A, der Eintrag bereits in Tabelle B existiert, wenn nein, wird er in B ans Ende der Tabelle eingefügt. Wenn ich in Tabelle A aber 12.000 Namen habe und in Tabelle B ebenfalls 11.000 Namen stehen, muss für jeden Eintrag aus A in Tabelle B gesucht werden, das dauert EWIG, wenn ich von oben nach unten durchlaufe(natürlich springe ich aus der Schleife raus, sobald der Eintrag gefunden wurde).
Kennt jemand einen effizienten String-Suchalgorithmus, den ich für meine Suche verwenden kann, damit die Laufzeit reduziert wird?
Leider kann ich keine Zeilen-Ids an die Namen vergeben, da ich sie jeden Mal aus der csv-datei laden muss und es sein kann, dass neue namen zwischendurch eingefügt werden, die die Reihenfolge verändern etc.
Wäre für Lösungsvorschläge sehr dankbar!
Schöne Grüße

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

Betreff
Datum
Anwender
Anzeige
Den könntest du wahrscheinlich selbst, auf ...
03.08.2013 15:22:16
Luc:-?
…der Basis von QuickSort oder einem ähnlich schnellen SortierAlgorithmus pgmieren, Taddel.
Dazu findest du ziemlich viel im noch existierenden Archiv des ehem Forums Spotlight (Beiträge von rlx).
Gruß Luc :-?

AW: String-Suchalgorithmus
03.08.2013 16:23:11
ransi
Hallo
Lade jeden Wert aus TAbelle B in ein Dictionary.
Dann versuchst du jeden Wert aus Tabelle A in das Dictionary zu packen.
Passt es rein fügst den Wert in ein temporäres Array.
Das fügst du am Ende an TabelleB an.
Dim L As Long
Dim myDic As Object
Dim TabelleA As Variant
Dim TabelleB As Variant
Redim tmp(1 To 1) As Variant
Dim lngCount As Variant
TabelleA = Range("A2:A20000").Value 'Anpassen
TabelleB = Range("C2:C20000").Value 'Anpassen
Set myDic = CreateObject("Scripting.Dictionary")
For L = LBound(TabelleB) To UBound(TabelleB) 'Lade jeden Wert aus TAbelle B in ein Dictionary.
    myDic(TabelleB(L, 1)) = 0
Next
For L = LBound(TabelleA) To UBound(TabelleA) 'Dann versuchst du jeden Wert aus Tabelle A in das Dictionary zu packen.
    If Not myDic.exists(TabelleA(L, 1)) Then
        myDic(TabelleA(L, 1)) = 0
        lngCount = lngCount + 1
        Redim Preserve tmp(1 To lngCount)
        tmp(lngCount) = TabelleA(L, 1) 'Passt es rein fügst den Wert in ein temporäres Array.
    End If
Next
'Anpassen
Range("C20001").Resize(UBound(tmp), 1) = WorksheetFunction.Transpose(tmp) 'Das fügst du am Ende an TabelleB an.

Schau es dir mal an.
https://www.herber.de/bbs/user/86704.xlsm
Ich glaube nicht das es etwas schnelleres gibt.
ransi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige