Clever-Excel-Forum

Normale Version: Angleichen zweier Data Sets
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, 

hänge aktuell an einem ziemlich nervigen Problem: 

Ich habe zwei Datasets in Excel mit entsprechenden Abfragen. In VBA ziehe ich aus beiden Sets Informationen auf Basis des Namens. Das Problem ist, dass bei dem einen Set nahezu nur Nachnamen (bei redundanten Nachnamen wird der erste Buchstabe des Vornamen mit einem Punkt vorgestellt) und beim anderen Vor- und Nachname. Da die Namen über ein Makro gesucht werden sollen, muss ich sinnvollerweise das Data Set mit nur Nachnamen dem anderen angleichen. Ist das nur manuell möglich? Bin da nicht so scharf drauf weil das über 500 Datensätze sind. Oder gibt es da eine andere Möglichkeit?

Vielen Dank für die Hilfe!
Hallo,

bei der Find-Methode gibt es die Möglichkeit, nach Teilstrings zu suchen. (LookAt:= xlPart)
Hallo GoFlake,

das angleichen der Datensätze würde ich manuell machen.
Über eine Wenn-Formel checken, ob rechts ein Punkt steht, wenn ja, diesen löschen.
Dann ein "*" an den Text hängen.
Jetzt kannst Du per SVerweis deine Daten abgleichen.

Gruß,
Lutz
Hallo,

da deine Beschreibung, was ausgabeseitig passieren soll unklar ist, habe ich die Ausgaben in eine Messagebox gepackt.

Code:
Option Explicit

Sub PassendeNamenFinden()
    Dim i As Long, j As Long, arrKurzName(), VarLangName$, VarKurzName$
    arrKurzName = Tabelle1.Range("A1:A" & Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row).Value
   
    With Tabelle2
        For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
            For j = 1 To UBound(arrKurzName, 1)
                VarLangName = .Cells(i, 1)
                VarKurzName = arrKurzName(j, 1)

                If Mid(VarKurzName, 3, 1) = " " Then
                    If Left(VarLangName, 1) & ". " & Right(VarLangName, Len(VarLangName) - InStrRev(VarLangName, " ")) = VarKurzName Then
                        MsgBox Left(VarLangName, 1) & ". " & Right(VarLangName, Len(VarLangName) - InStrRev(VarLangName, " ")) & " und " & VarKurzName & " in Zeile " & j & " sind passend"
                    End If
                Else
                    If Right(VarLangName, Len(VarLangName) - InStrRev(VarLangName, " ")) = VarKurzName Then
                        MsgBox Right(VarLangName, Len(VarLangName) - InStrRev(VarLangName, " ")) & " und " & VarKurzName & " in Zeile " & j & " sind passend"
                    End If
                End If
               
            Next j
        Next i
    End With
End Sub

Es werden in 2 Schleifen mit jeweils 2 Abfragen alle Nachnamen abgefragt und differenziert, ob das 3. Zeichen im String ein Leerzeichen ist. Man könnte auch den Punkt als 2. Zeichen verwenden.
Teste mal ob es so für deine Zwecke schon passt. Besser ist es eine Beispieldatei hochzuladen. Damit man den Code nicht für die Katz schreibt.
Anbei noch die fiktive Namensliste mit dem Code zum Testen.

Gruß Uwe
Hallo,

da hatte ich noch einen deftigen Denkfehler drin. So sollte es funktionieren unter der Bedingung, dass bei Mehrfachnamen der gleiche Anfangsbuchstabe und Punkt des Vornamens nicht mehrfach trotz unterschiedlichen Vornamen vorkommt. Also saubere eindeutige Kürzel der Vornamen.
Teste mal.
[attachment=44531]

Gruß Uwe