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

unterschiedliche Kundenlisten abgleichen und Zeile

unterschiedliche Kundenlisten abgleichen und Zeile
28.11.2014 15:00:26
Jörg
Hallo Zusammen,
ich habe zwei unterschiedliche Kundenlisten, die außer der Plz kein identisches Format besitzen, d.h. in der einen Liste steht als Firmenname "Buchholz GmbH" und in der anderen Liste steht "Reiner Buchholz" drin. Ich möchte die beiden Listen abgleichen und wenn Plz und der gleiche oder ähnliche Firmenname (Buchholz) gefunden wurde, soll die entsprechende Zeile der einen Liste hinter den letzten Eintrag der anderen Liste kopiert/importiert werden.
Ich hoffe, ich habe mich verständlich ausgedrückt und ihr könnt mir helfen.
Vielen Dank im Voraus
Jörg

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
hier eine VBA-Variante zum testen
28.11.2014 17:29:57
Tino
Hallo,
deine Info ist etwas dürftig.
Wo stehen die entsprechenden Daten in den Listen?
Wo beginnen diese?
Hier mal ein Bsp. Code zum testen, evtl. kannst Du die Anpassungen selbst vornehmen.
kommt als Code in Modul1
Option Explicit 
 
Sub Vergleich() 
Dim ListAbgleich1(), ListAbgleich2() 
Dim ArListe1PLZ, ArListe1Name, ArListe2PLZ, ArListe2Name 
Dim n&, nn&, varValue, varValues 
 
With Tabelle1 'Tabelle anpassen 
    With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).EntireRow 
        ArListe1PLZ = .Columns(1).Resize(, 2) 'Spalte PLZ 
        ArListe1Name = .Columns(2).Resize(, 2) 'Spalte Firmenname 
    End With 
End With 
 
With Tabelle2 'Tabelle anpassen 
    With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).EntireRow 
        ArListe2PLZ = .Columns(1).Resize(, 2) 'Spalte PLZ 
        ArListe2Name = .Columns(2).Resize(, 2) 'Spalte Firmenname 
    End With 
End With 
 
Redim Preserve ListAbgleich1(1 To Ubound(ArListe1PLZ), 1 To 1) 
Redim Preserve ListAbgleich2(1 To Ubound(ArListe2PLZ), 1 To 1) 
   
For n = 1 To Ubound(ArListe1PLZ) 
      For nn = 1 To Ubound(ArListe2PLZ) 
          If ArListe1PLZ(n, 1) = ArListe2PLZ(nn, 1) Then 
              varValues = Split(ArListe1Name(n, 1), " ") 
              For Each varValue In varValues 
                  If InStr(ArListe2Name(nn, 1), varValue) > 0 Then 
                     ListAbgleich1(n, 1) = ArListe2Name(nn, 1) 
                     ListAbgleich2(n, 1) = ArListe1Name(n, 1) 
                     Exit For 
                  End If 
              Next varValue 
          End If 
      Next nn 
Next n 
 
'Ausgabe ***************************************************** 
With Tabelle1 'Tabelle anpassen 
    'erste Zelle anpassen 
    .Range("C2").Resize(Ubound(ListAbgleich1)) = ListAbgleich1 
End With 
 
With Tabelle2 'Tabelle anpassen 
    'erste Zelle anpassen 
    .Range("C2").Resize(Ubound(ListAbgleich2)) = ListAbgleich2 
End With 
End Sub 
Gruß Tino

Anzeige
AW: hier eine VBA-Variante zum testen
29.11.2014 10:18:43
Jörg
Hallo Tino,
vielen Dank für deine schnelle Info.
Ich kenne mich mit VBA nicht aus und hatte bereits mit verschiedenen Formeln versucht mein Problem zu lösen.
Es sind zwei unterschiedlich aufgebaute Kundenlisten.
1. Kundenliste hat folgenden Aufbau
Spalte A-G
Ident.Nr. - Name - Str. - PLZ - Ort - Gebiet - Verband
2. Kundenliste
Spalte A-J
Kunde - Bezeichnung - Umsatz - Name1 -Name2 - Strasse - PLZ - Ort - Verkaufsgebiet - Reisender1
Beide Listen haben noch weitere Spalten, die aber herausgelöscht werden können. Wie bereits oben beschrieben, hat nur die PLZ das identische Format. Bei Kundenliste1 kann der Name anders dargestellt werden (z.B. Fester GmbH) als bei Kundenliste2 (z.B. Fester Türenbau). Es müsste eine Abfrage nach PLZ und danach nach gleicher/ähnlicher Name geben. Ich glaube ich habe sowetwas schon mal gelesen. Wenn Kundenliste1 einen gleichen Eintrag in Kundenliste2 gefunden hat, dann soll die komplette Zeile aus Kundenliste2 in Kundenliste1 hinter den gleichen Eintrag/Namen eingefügt/importiert werden, also in Spalte H bis Spalte Q.
Ich hoffe, ich habe einigermaßen verständlich erklärt. Hoffentlich kannst du oder ein anderer mir weiterhelfen.
Grüße Jörg

Anzeige
teste mal so....
29.11.2014 12:10:08
Tino
Hallo,
ok. kannst mal so versuchen.
kommt als Code in Modul1
Option Explicit 
 
Sub Vergleich() 
Dim ListAbgleich1() 
Dim ArListe1PLZ, ArListe1Name, ArListe2 
Dim n&, nn&, nnn&, varValue, varValues 
Dim oWSListe1 As Worksheet, oWSListe2 As Worksheet 
 
Set oWSListe1 = Tabelle1 'Tabelle Liste 1 
Set oWSListe2 = Tabelle2 'Tabelle Liste 2 
 
Const SpPLZ_Liste1& = 4 'Spalte PLZ Liste1 
Const SpName_Liste1& = 2 'Spalte Name Liste1 
 
Const SpPLZ_Liste2& = 7 'Spalte PLZ Liste2 
Const SpName_Liste2& = 4 'Spalte Name Liste2 
 
  
With oWSListe1 'Tabelle anpassen 
    With .Range(.Cells(2, SpPLZ_Liste1), .Cells(.Rows.Count, SpPLZ_Liste1).End(xlUp)).EntireRow 
        ArListe1PLZ = .Columns(SpPLZ_Liste1).Resize(, 2) 'Spalte PLZ 
        ArListe1Name = .Columns(SpName_Liste1).Resize(, 2) 'Spalte Firmenname 
    End With 
End With 
  
With oWSListe2 'Tabelle anpassen 
    With .Range(.Cells(2, SpPLZ_Liste2), .Cells(.Rows.Count, SpPLZ_Liste2).End(xlUp)).EntireRow 
        ArListe2 = .Cells(1, 1).Resize(.Rows.Count, 10) 
    End With 
End With 
  
Redim Preserve ListAbgleich1(1 To Ubound(ArListe1PLZ), 1 To Ubound(ArListe2, 2)) 
    
For n = 1 To Ubound(ArListe1PLZ) 
      For nn = 1 To Ubound(ArListe2) 
          If ArListe1PLZ(n, 1) = ArListe2(nn, SpPLZ_Liste2) Then 
              varValues = Split(ArListe1Name(n, 1), " ") 
              For Each varValue In varValues 
                  If InStr(ArListe2(nn, SpName_Liste2), varValue) > 0 Then 
                     For nnn = 1 To Ubound(ArListe2, 2) 
                        ListAbgleich1(n, nnn) = ArListe2(nn, nnn) 
                     Next nnn 
                     Exit For 
                  End If 
              Next varValue 
          End If 
      Next nn 
Next n 
  
'Ausgabe ***************************************************** 
With oWSListe1 'Tabelle anpassen 
    'erste Zelle anpassen 
    .Range("H2").Resize(Ubound(ListAbgleich1), Ubound(ListAbgleich1, 2)) = ListAbgleich1 
End With 
 
End Sub 
Gruß Tino

Anzeige
AW: teste mal so....
29.11.2014 14:59:02
Jörg
Hallo Tino,
noch einmal vielen Dank. Ich werde den Code mal testen.
Gruß Jörg

AW: hier eine VBA-Variante zum testen
01.12.2014 17:22:43
Jörg
Hallo Tino,
ich bekomme es einfach nicht hin. Darf ich dir zwei Beispiellisten hochladen? Siehst nur du die Listen oder sind die öffentlich?
Gruß Jörg

AW: hier eine VBA-Variante zum testen
01.12.2014 17:55:32
Tino
Hallo,
die Dateien sind dann öffentlich!
Du kannst ja geheime Daten verändern.
Gruß Tino

AW: hier eine VBA-Variante zum testen
01.12.2014 18:54:27
Jörg
Hallo,
ich habe die zwei Listen in die Datei Liste1 Tabelle1 (=Liste1) und Tabelle2 (=Liste2) gepackt und mit Fantasienamen versehen.
Wäre es einfacher die Daten aus Liste2 hinter die Daten in Liste1 zu kopieren und dann abgleichen lassen, also alles in ein Tabellenblatt?
Gruß Jörg
https://www.herber.de/bbs/user/94133.xlsx

Anzeige
komme erst heut abend o. morgen dazu oT.
01.12.2014 19:10:20
Tino

AW: komme erst heut abend o. morgen dazu oT.
01.12.2014 20:19:47
Jörg
Hallo Tino,
mach dir einen schönen Abend. Ich finde es super von dir das du mir hilfst.

hier Deine Musterdatei
02.12.2014 06:35:33
Tino
Hallo,
kannst mal testen.

Die Datei https://www.herber.de/bbs/user/94136.xlsm wurde aus Datenschutzgründen gelöscht


PS: Datei als xlsm, xls o. xlsb speichern, xlsx kann kein VBA.
Gruß Tino

AW: hier Deine Musterdatei
03.12.2014 20:38:53
Jörg
Hallo Tino,
vielen Dank für deine Mühe und die Musterdatei.
Ich habe mich nach und nach hineingearbeitet. Ein paar Sachen funktionieren,wenn ich meine Kundendaten hineinkopiere noch nicht.
Die Übernahme der Fantasienamen klappt hunderprozentig. Wenn ich meine Kundendaten in Tabelle1 und in Tabelle2 eingefügt habe, werden nicht alle Kunden korrekt übernommen.
Aufgefallen ist mir, wenn in Tabelle1 hinter dem Namen ein oder mehrere Leerschritte sind,werden die Daten nicht mehr richtig übernommen. Ich habe dir die entsprechenden Zeilen farbig markiert (rot = falsch, grün oder nicht markiert = richtig).
Kannst du das im Code abändern?
Wo muss ich den Code ändern, wenn ich mehr Spalten aus Tabelle2 in Tabelle1 übernehmen möchte? Die folgenden Zahlen änderte ich auf die entsprechenden Spalten ab
Const SpPLZ_Liste1& = 4 'Spalte PLZ Liste1
Const SpName_Liste1& = 2 'Spalte Name Liste1
Const SpPLZ_Liste2& = 7 'Spalte PLZ Liste2
Const SpName_Liste2& = 4 'Spalte Name Liste2
.Range("H" & varRowL1 + 1).Resize(UBound(ListAbgleich1), UBound(ListAbgleich1, 2)) = ListAbgleich1
rngHeader.Copy .Range("H" & varRowL1)
With .Range("H" & varRowL1).Resize(, 10)
änderte nur nichts beim Einfügen.
Kann ich den blauen "Ausführungs" Button einfach in eine andere Liste kopieren?
Hier die bearbeitete Musterdatei

Die Datei https://www.herber.de/bbs/user/94171.xlsm wurde aus Datenschutzgründen gelöscht


Super vielen Dank für deine Arbeit.
Gruß Jörg

Anzeige
AW: hier Deine Musterdatei 2
04.12.2014 09:36:14
Tino
Hallo,
ok. die überflüssigen Leerzeichen werden im Code gelöscht.
Habe eine weitere Konstante eingebaut wo Du die Anzahl der Spalten bestimmen kannst.
Const CopyAnzSp& = 10
Den Button kannst Du auch wo anders innerhalb der Datei hinlegen.
Die Referenzierung auf die Tabellen erfolgt ja im Code.
Set oWSListe1 = Tabelle1 'Tabelle Liste 1
Set oWSListe2 = Tabelle2 'Tabelle Liste 2

Die Datei https://www.herber.de/bbs/user/94180.xlsm wurde aus Datenschutzgründen gelöscht


Gruß Tino

Anzeige
AW: hier Deine Musterdatei 2
04.12.2014 18:58:01
Jörg
Hi Tino,
vielen Dank. Ich teste nachher und melde mich.
Gruß Jörg

AW: hier Deine Musterdatei 2
05.12.2014 11:08:16
Jörg
Hallo Tino,
ich habe die Datei getestet. Es wird noch etwas falsch übernommen.
Wenn in Tabelle1 und Tabelle2 die gleiche PLZ gefunden wird, dann wird der Name abgeglichen. Wird im Namen z.B GmbH oder KG gefunden, werden die Daten übernommen, obwohl kein Zusammenhang des Kundennamen besteht. Muster habe dir in Tabelle1 farbig markiert. Besteht die Möglichkeit anstatt des Name1 den Firmennamen aus Tabelle2 zum Abgleich zu nehmen?
Musterdatei 2
https://www.herber.de/bbs/user/94214.xlsm
Gruß Jörg

Anzeige
AW: hier Deine Musterdatei 2
07.12.2014 12:50:05
Jörg
Hallo Tino,
deine Datei funktioniert schon super. Trotzdem habe ich noch ein Problem. Nachdem die PLZ gefunden wurde, wird der Name abgeglichen. Steht in Tabelle2 "GmbH" oder "KG" übernimmt der Code die Daten, obwohl der Name nicht stimmt. Ich habe deinen VBA Code schon verändert indem ich in Tabelle2 nicht die Spalte "Name" sondern die Spalte "Firmenname" abfrage. In dieser Spalte stehen nur vereinzelt Zusätze wie "GmbH" oder "KG".
Gibt es die Möglichkeit dass du hier noch etwas programmieren kannst, z.B. GmbH oder KG nicht abgleichen oder nur den Namen abgleichen?
Ich habe die Musterdatei noch einmal angehängt.
https://www.herber.de/bbs/user/94257.xlsm
Grüße Jörg
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige