Microsoft Excel

Herbers Excel/VBA-Archiv

Text vergleichen | Herbers Excel-Forum


Betrifft: Text vergleichen von: BuStü
Geschrieben am: 20.10.2008 14:21:03

Hallo Leute, ist es möglich per Formel folgendes Probelm zu lösen:

 AB
1Kunden-Nr.Kunden Name
240506050 Wolken, Max Müller GmbH
3  
4  
5KundenNr.Kunden Name
67081650 Wolken


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

In der ersten Tabelle (2400 DS) sind Kundennummer und Kundennamen sowie in der zweiten Tabelle (700DS). Die Namen sind nur teilweise identisch, die Nummern verschieden. Kann man nun die teilweise identischen Namen vergleichen und die Kundennummer hinzufügen. Bsp. Kunden-Nr. 405060 Kunden-Nr. 70816 Kuindenname
50 Wolken.

Für Eure Hilfe im Voraus dankend
Burghard

  

Betrifft: AW: Text vergleichen von: David
Geschrieben am: 20.10.2008 14:44:12

Hallo Burghard,

lies dir bitte nochmal deine Problembeschreibung durch und frage dich selbst, ob das jemand, der deine Tabellen nicht kennt, verstehen kann.
Ich werde weder aus deinem Beispiel schlau noch aus deiner Beschreibung.

Prinzipiell ist ein Vergleich von Datensätzen immer möglich, wenn es ein eindeutiges Kriterium, wie z. Bsp. Kundennummer gibt, allemal.

Vielleicht solltest du auch eine Beispieltabelle hochladen, wo man sieht, was vorher da ist und wohin du wilslt.

Gruß
David


  

Betrifft: AW: Text vergleichen von: BuStü
Geschrieben am: 20.10.2008 15:04:09

Hallo David,
tut mir leid das ich mich undeutlich ausgedrückt habe. In der Beispielmappe https://www.herber.de/bbs/user/56141.xls Tabelle 1 , müßte hervorgehen, wohin ich möchte.
MfG
Burghard


  

Betrifft: AW: Text vergleichen von: David
Geschrieben am: 20.10.2008 15:13:30

Hallo Burghard,

das muss DIR nicht leid tun. ;-)

Prinzipiell ist das ein einfacher SVERWEIS nach links mit der Formel:

=INDEX(Tabelle2!A:A;VERGLEICH(B2;Tabelle2!B:B;0))

Allerdings muss dazu der Name in beiden Teilen IDENTISCH sein. Falls das nicht so ist, muss zumindest eins eine identische TEILMENGE des anderen sein. Falls das vorkommen soll, erläutere bitte noch mögliche Abweichungen.

Eine sog. "unscharfe" Suche kannst du mit Excel-Logik nicht realisieren.

Gruß
David


  

Betrifft: AW: Text vergleichen von: BuStü
Geschrieben am: 20.10.2008 16:11:42

Hallo David,
recht vielen Dank für Deine Lösung.
Kann man den Vergleich zumindestens auf die ersten beiden Namen einschränken, also wenn in einer Tabelle Wolke steht soll in der anderen Tabelle Wolke GmbH als identisch hingenommen werden.
MfG
Burghard


  

Betrifft: AW: Text vergleichen von: David
Geschrieben am: 21.10.2008 08:09:58

Hallo Burghard,

ich denke, mit der Lösung von fcs bist du gut versorgt. Sicher kann man auch per Formel eine Suche nach Teilmengen machen, aber das ist jetzt wohl müßig.

Gruß
David


  

Betrifft: AW: Text vergleichen von: fcs
Geschrieben am: 20.10.2008 16:44:54

Hallo Burghard,

bei einem solchen Vergleich mit teilweisen Übereinstimmungen gibt es natürlich immer eine gewisse Fehlerquote.

Bei meiner Makro-Lösung werden zunächst die identischen Namen gesucht. Danach wird nach max. Anzahl an übereinstimmenden Wörtern gesucht, wobei ich die Tabelle2 in beiden Richtungen durchsuche, um ggf. den einen oder anderen Fehler zu finden bei ähnlichen Namen.

Einige in vielen Namen vorkommende Worte, wie "Co", "GmbH" etc., werden dabei nicht berücksichtigt.

Gruß
Franz

Sub KD_Namen_Abgleich()
  Dim wks1 As Worksheet, wks2 As Worksheet
  Dim lngZeile1 As Long, lngZeile2 As Long
  Dim arrWorte1, arrWorte2, intW1 As Integer, intW2 As Integer
  Dim varSuchen As Variant, rngSuchen As Range
  Dim varSuchen1 As Variant
  Set wks1 = Worksheets("Tabelle1")
  Set wks2 = Worksheets("Tabelle2")
  
  'identische Einträge abgleichen
  For lngZeile1 = 2 To wks1.Cells(wks1.Rows.Count, 1).End(xlUp).Row
    varSuchen = wks1.Cells(lngZeile1, 2) 'Kundenname
    'Name in Tabellel2 suchen
    With wks2
      Set rngSuchen = .Columns.Find(what:=varSuchen, LookIn:=xlValues, _
          lookat:=xlWhole)
      If Not rngSuchen Is Nothing Then
        wks1.Cells(lngZeile1, 3) = rngSuchen.Offset(0, -1).Value 'KD-Nr.
        wks1.Cells(lngZeile1, 4) = rngSuchen.Value 'Name
        wks1.Cells(lngZeile1, 5) = "identisch"
      End If
    End With
  Next
  
  'Wörter in Kundennamen vergleichen
  For lngZeile1 = 2 To wks1.Cells(wks1.Rows.Count, 1).End(xlUp).Row
    If IsEmpty(wks1.Cells(lngZeile1, 3)) Then 'gefundene identische überspringen
    'Kundenname in Tabelle 1 splitten
    arrWorte1 = Split(wks1.Cells(lngZeile1, 2), " ")
    With wks2
      'Vorwärts-Suche nach max. an Übereinstimmungen im Kundennamen
        varSuchen1 = 0
        For lngZeile2 = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            arrWorte2 = Split(.Cells(lngZeile2, 2), " ")
            varSuchen = 0
            'Arrays vergleichen
            For intW1 = LBound(arrWorte1) To UBound(arrWorte1)
              For intW2 = LBound(arrWorte2) To UBound(arrWorte2)
                Select Case LCase(arrWorte2(intW2))
                Case "&", "gmbh", "co.", "co", "kg", "co.kg", "+", "-", "ag"
                  'Worte die beim Vergleich nicht berücksichtigt werden sollen
                Case Else
                  If LCase(arrWorte1(intW1)) = LCase(arrWorte2(intW2)) Then
                    'Übereinstimmungen zählen
                    varSuchen = varSuchen + 1
                  End If
                End Select
              Next
            Next
            'Prüfen, ob neues max. an Übereinstimmungen
            If varSuchen > varSuchen1 Then
              wks1.Cells(lngZeile1, 3) = .Cells(lngZeile2, 1).Value 'KD-Nr.
              wks1.Cells(lngZeile1, 4) = .Cells(lngZeile2, 2).Value 'Name
              wks1.Cells(lngZeile1, 5) = varSuchen & " Worte"
              varSuchen1 = varSuchen
            End If
        Next
    
      'Rückwärts-Suche nach max. an Übereinstimmungen im Kundennamen
        varSuchen1 = 0
        For lngZeile2 = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
            arrWorte2 = Split(.Cells(lngZeile2, 2), " ")
            varSuchen = 0
            'Arrays vergleichen
            For intW1 = LBound(arrWorte1) To UBound(arrWorte1)
              For intW2 = LBound(arrWorte2) To UBound(arrWorte2)
                Select Case LCase(arrWorte2(intW2))
                Case "&", "gmbh", "co.", "co", "kg", "co.kg", "+", "-"
                  'Teil-Worte die nicht berücksichtigt werden sollen
                Case Else
                  If LCase(arrWorte1(intW1)) = LCase(arrWorte2(intW2)) Then
                    varSuchen = varSuchen + 1
                  End If
                End Select
              Next
            Next
            
            If varSuchen > varSuchen1 Then
              wks1.Cells(lngZeile1, 6) = .Cells(lngZeile2, 1).Value 'KD-Nr.
              wks1.Cells(lngZeile1, 7) = .Cells(lngZeile2, 2).Value 'Name
              wks1.Cells(lngZeile1, 8) = varSuchen & " Worte"
              varSuchen1 = varSuchen
            End If
        Next
        If wks1.Cells(lngZeile1, 7) <> wks1.Cells(lngZeile1, 4) Then
          wks1.Cells(lngZeile1, 9) = "abgleichen!"
        End If
    End With
    End If
  Next
End Sub




Beiträge aus den Excel-Beispielen zum Thema "Text vergleichen"