6.2k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

habe folgenden Code, der mir für jeden passenden Namen+Vornamen aus einem anderen Tabellenblatt eine diesem Namenpaar entsprechende Nr. zuordnen soll.
Klapp soweit, bis auf die Datensätze, wo der Namen mehrfach zu verschiedenen Vornamen vorkommt. Hier wird eine falsche Nr. zugewiesen. Ich habe Inder Testdatei solch einen Fehler zur besseren Verdeutlichung einmal farbig markiert.
Wir kann ich den bestehenden Code modifizieren, damit die Zuordnung eindeutig wird?
Sub DatAkt()
'
' Übernahme der M-Nr

Sheets("M-Nr").Select

Dim rng As Range, rng1 As Range
Dim iRow As Integer
iRow = 2
Do Until IsEmpty(Cells(iRow, 1))


Set rng = Sheets("Daten").Columns(1).Find( _
what:=Cells(iRow, 3), lookat:=xlWhole, LookIn:=xlValues)
Set rng1 = Sheets("Daten").Columns(2).Find( _
what:=Cells(iRow, 4), lookat:=xlWhole, LookIn:=xlValues)


If Not rng Is Nothing And Not rng1 Is Nothing Then
Range(rng.Offset(0, 4), rng.Offset(0, 4)).Value = _
Cells(iRow, 1).Value


End If
Sheets("M-Nr").Select
iRow = iRow + 1
Loop

End Sub


http://www.file-upload.net/download-8799247/TestZuordnung.xlsm.html

Gruß
Andreas

22 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Andreas,

der Codeablauf kann noch etwas verkürzt werden, indem du ihn so änderst:

If rng.Offset(0, 1) = Cells(iRow, 1).Offset(0, 1) Then
Cells(iRow, 5) = rng.Offset(0, -2).Value
Exit Do
End If


Der komplette Code macht folgendes:

er läuft in einer Schleife (das ist die For-Next-Schleife) über alle Namen des (aktiven) Tabellenblattes und sucht in Tabelle "M-Nr" nach dem entsprechenden Nachnamen.

Findet er ihn, wird die Zelladresse auf die Variable strStart geschrieben und in der Do-Loop-Schleife werden alle relevanten Nachnamen geprüft, ob der Vorname mit dem laufenden Vornamen übereinstimmt, bis wieder die erste Zelle erreicht ist. Stimmen Nach- und Vorname (iregndwann) überein, wird die Nr. aus Spalte A in Spalte E eingetragen und die Do-Loop-Schleife verlassen. Danach wird die For-Next-Schleife fortgesetzt und zum nächsten Nachnamen gegangen.

Damit sollte auch klar sein, weshalb dein Code aus 17 nicht funktionieren kann.

Bis später,
Karin
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo,

habe mir in der Zwischenzeit deinen Code noch mal in Ruhe angesehen - mit deiner zusätzlichen Erklärung verstehe ich jetzt auch wie das funktioniert ...:-))
Prima, vielen Dank!!!!
Andreas
...