Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1592to1596
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

Suchkriterium aus 4 Spalten in sep. Tabelle suchen

Suchkriterium aus 4 Spalten in sep. Tabelle suchen
23.11.2017 17:34:20
Kai
Hallo,
ich möchte per VBA (keine Formeln) einen Abgleich zwischen zwei Listen (Tabelle1 / Tabelle2) machen.
Meine "Tabelle1" sind meinen Basisdaten
A___________B__________C__________D__________E_________F__________
Land________Ort________Strasse____Nr_________Such1_____Such2______
Tabelle2 ist eine Referenzliste
A___________B__________C__________D__________E__________F___________G__________H__________I_________J________
Info1________Land_______Info2_______Info3_______INfo4_______Ort_________Strassse_____Nr_________Such1_____Such2____
Aus Tabelle1 soll nun die Kombination aus Spalte A, B, C und D (Land, Ort,Strasse,Nr) in Tabelle2 gesucht werden.
Wind die Kombination in Tabelle2 in Spalte B, F, G und H gefunden, sollen die Infos aus Spalte I und J (Such1 und Such2) in die Tabelle 1 geschrieben werden.
Meine Tabellen haben ca 5000 Zeilen. Mit einer Schleife lassen sich sicher alle DS abarbeiten
Falls die Darstellung zu kompliziert ist, stelle ich auch gerne einen Tabelle zur Verfügung.
Kann mit jemand mit VBA helfen ?
Danke
Kai

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchkriterium aus 4 Spalten in sep. Tabelle suchen
23.11.2017 18:55:16
ChrisL
Hi Kai
Beispieldatei wäre hilfreich und Zusatzinfo zum Umgang mit Mehrfachtreffern.
Zwei verschachtelte Schleifen würde funktionieren (schau mal in die Recherche für Beispiele). Allerdings dauert es bei 5000*5000 Datensätzen ziemlich lange.
Ich würde umgekehrt in Tabelle2 eine ZÄHLENWENNS() Formel mit Bezug zur Tabelle1 einsetzen. Alles grösser Null filtern und in Tabelle1 kopieren.
Damit hättest du auch gleich das Mehrfachtrefferproblem gelöst.
Ich denke der Vorgang lässt sich mittels Makrorekorder aufzeichnen und für den Feinschliff kannst du den Code noch ins Forum stellen.
Damit die Kirche im Dorf bleibt, poste ich noch den Hinsweis auf Bruder Williams ;)
https://www.herber.de/forum/messages/1592540.html
Obiges Vorgehen ist auch nicht super schnell, aber leicht einsetzbar. Schnelle Alternativen sind Datenfelder/Array, aber da müsstest du dich einlesen.
cu
Chris
Anzeige
AW: Suchkriterium aus 4 Spalten in sep. Tabelle suchen
23.11.2017 19:35:32
Kai
Hallo ,
habe mal ein Beispiel gemacht. Sorry, wenn ich mich falsch ausgedrückt habe:
Meine Referenzliste hat ca. 5000 DS und die, die ich abgleichen will, ist immer so zwischen
20 und 100 DS groß.
100 DS sollen also in der Referenzliste gesucht werden, und bei Treffern, durch weitere Daten ergänzt werden.
Ich hab eine kleine Beschreibung in der Excel Mappe.
https://www.herber.de/bbs/user/117878.xlsx
Danke
Kai
AW: Suchkriterium aus 4 Spalten in sep. Tabelle suchen
23.11.2017 19:48:13
Kai
Habe mir mal die Beispiele angeschau, bin mir aber nicht sicher , ob wir da vom gleichen reden.
In dem Beispie geht es mehr ums löschen von Daten nicht ums ergänzen, oder ?
Kai
Anzeige
AW: =sverweis()
23.11.2017 20:55:31
Kai
Hallo Fennek,
Falls es keine VBA Lösung mehr gibt, werde ich es auf diese Weise machen. Danke dafür.
Ich wollte es mit VBA realisieren, da ich die Liste erst mal per VBA in meine Referenz Tabelle
rein lade und dann auch gleich mit VBA weiter machen wollte, bzw wollte nicht erst Formeln einfügen (Verkettungen) um darüber wieder ein Ergebnis zu erzielen.
Mein weiterer Plan war auch, (in einer späteren Version) nicht den ganzen String immer anzuschauen, sondern nur zB immer die ersten 5 - 8 Zeichen. Warum ? Wegen eventuell aufkommenden verschiedener Schreibweisen.
IN der einen Liste könnte als Straße drin stehen "Stuttgarter Str." in der anderen "Stuttgarterstr."
und schon passt es nicht mehr.
Das würde sicher besser in VBA gehen,
Dazu brauche ich aber erst so was wie ein Basis Beispiel, dass ich dann ausbauen könnte.
Aber wenn sich nichts mehr findet, werde3 ich es so machen müssen,
Kai
Anzeige
For Next Schleife
24.11.2017 08:35:50
ChrisL
Hi Kai
Agiles Vorgehen: Zuerst Programmieren und dann die Anforderungen definieren ;)
Wie gesagt, Beispiele für For-Next-Schleifen gäbe es im Archiv wie Sand am Meer. Dublettenerkennung ist hingegen eine Wissenschaft für sich.
Sub t()
Dim WS1 As Worksheet: Set WS1 = Worksheets("Tabelle1")
Dim WS2 As Worksheet: Set WS2 = Worksheets("Tabelle2")
Dim i As Long, j As Long
Application.ScreenUpdating = False
For i = 2 To WS1.Cells(Rows.Count, 1).End(xlUp).Row
For j = 2 To WS2.Cells(Rows.Count, 1).End(xlUp).Row
If WS1.Cells(i, 1) = WS2.Cells(j, 1) And _
WS1.Cells(i, 2) = WS2.Cells(j, 2) And _
WS1.Cells(i, 3) = WS2.Cells(j, 3) And _
WS1.Cells(i, 4) = WS2.Cells(j, 4) Then
WS1.Cells(i, 5) = WS2.Cells(j, 5)
WS1.Cells(i, 6) = WS2.Cells(j, 6)
Exit For
End If
Next j
Next i
End Sub
cu
Chris
Anzeige
AW: For Next Schleife
24.11.2017 15:22:30
Kai
Hallo Chris,
ich danke dir ganz herzlich für dein Beispiel. Damit ich wegen der eventuell aufkommenden unterschiedlichen Schreibweisen keine Probleme bekomme, habe ich mich entschieden, nur die ersten 5 Zeichen von einer Zelle abzufragen:
If Left(WS1.Cells(i, 4), 5) = Left(WS2.Cells(j, 4), 5) And _
Bei der Straße zB gehe ich davon aus, die unterschiedlichen Schreibweisen werden eher in hinteren Teil des Strings passieren
ZB: "Stuttgarter Str." und Stuttgarterstrasse" oder mal mit und mal ohne Nummer. Die Trefferquote dürfte relativ hoch sein.
Doch, ich habe im Archiv geschaut war mir aber nicht sicher, wie ich das mit Next For Schleife am besten umsetze.
Aber sieht doch einfacher aus als ich gedacht habe.
Danke noch mal
Kai
Anzeige
AW: Was ist los?
24.11.2017 10:14:19
Fennek
Hallo in die Runde,
m.E. ist die Aufgabenstellung gut beschrieben und mit VBA Dictionary zu lösen. Aber ich habe mich entschieden keinen Code zu schreiben und einfach mal abzuwarten, was die anderen machen.
Da es auch in anderen Foren ähnliches ist, gibt es eine (stillschweigende) Übereinkunft, keine Code mehr zu liefern? So wie Storax' Fußnote "not a code-writing service"?
mfg
AW: Was ist los?
24.11.2017 11:19:24
ChrisL
Hi Fennek
Die Frage war klar, bis die Erkennung unterschiedlicher Schreibweisen dazu kam (dann wird es mit Verweis nämlich schwierig).
"Stuttgarter Str." vs. "Stuttgarterstr."
"Stuttgarter Str." vs. "Stuttgarterstrasse"
etc.
Dictionary oder Array wäre sinnvoll, aber wenn bereits eine For-Next-Schleife zur unlösbaren Aufgabe wird, dann verzichte ich auf so etwas lieber resp. würde ich erwarten, dass sich der Frager soweit einliest, damit eine Lösung wenigstens halbwegs nachvollzogen werden kann.
Und zum letzten Absatz. Wenn ich Lust habe gratis Auftragsprogrammierung zu machen, dann mache ich es. Mit mir hat ja niemand eine Übereinkunft getroffen und die Forumsregeln verbieten es auch nicht.
In solchen Fällen erwarte ich jedoch eine gewisse Mitarbeit des Fragers (Beispieldatei, Recherche, Interesse etc.). Kai hat zwar trotz Hinweis nicht ins Archiv geschaut (oder mindestens nichts dazu geschrieben z.B. Beispielcode), aber er hat sich immerhin bei der Aufgabenformulierung bemüht und darum habe ich mich zu einem Mustercode hinreissen lassen.
Schlussendlich gilt aber "Leben und Leben lassen" und jeder soll es so handhaben wie er/sie will (im Rahmen der geschriebenen Gesetze und Forumsregeln).
cu
Chris
Anzeige
AW: VBA-Code
25.11.2017 19:58:57
Fennek
Hallo Kai,
nach einigen Überlegen, ob ich antworten sollte, hier ein für die Bsp-Datei passender Code. Die Sheets werden mit dem Index angeprochen, d.h. in der Originaldatei musses genauso sein, oder angepasst werden.
Ich hoffe, dass deine VBA ausreichen, um den Code einigermaßen nachvollziehen zu können.

Sub iFen()
Const ll As Integer = 9
Set dd = CreateObject("scripting.dictionary")
Ar = Sheets(2).Cells(1).CurrentRegion
For i = 2 To UBound(Ar)
k = Ar(i, 1) & "|" & Ar(i, 2) & "|" & Left(Ar(i, 3), ll) & "|" & Ar(i, 4)
dd.Item(k) = Ar(i, 5) & "|" & Ar(i, 6)
Next i
'Debug.Print dd.Count, Join(dd.keys, Chr(10))
With Sheets(1)
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
k = .Cells(i, 1) & "|" & .Cells(i, 2) & "|" & Left(.Cells(i, 3), ll) & "|" & .Cells(i,  _
4)
If dd.exists(k) Then
Cells(i, "G").Resize(, 2) = Application.Transpose(Application.Transpose(Split( _
dd.Item(k), "|")))
End If
Next i
End With
End Sub
mfg
Anzeige

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige