der VBA Code hat soweit geklappt.
Nur hat sich meine Arbeitsmappe verändert.
Es kommen jetzt weitere Blätter hinzu und der Code scheint nicht mehr klar zu wissen wo er suchen muss und vor allem wo er einfügen muss.
Er rechnet zwar etwas, dann kommt aber kein Ergebnis (zumindest kein für mich sichtbares).
Any thoughts wie man den Code anpassen kann um ihn auf (in meinem Beispiel) jetzt auf Tabelle5 (Arbeitsblatt "Stammdaten") weisen zu lassen?
Die Tablelle mit den vorgegebenen Suchbegriffen war ja im Code klar definiert und kann leicht geändert werden.
Sub Arbeitsplangruppenzuordnung()
Dim lngZ As Long, i As Long
Dim Zelle As Range
Dim rngFound As Range
Dim firstAddress As String
Dim wks As Worksheet
Set wks = Sheets("Stammdaten")
Application.ScreenUpdating = False
With wks
lngZ = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range("E4:E" & lngZ).ClearContents
End With
For Each Zelle In wks.Range("Tabelle5")
If Zelle <> "" Then
With wks.Range("C4:C" & lngZ)
Set rngFound = .Find(Zelle, LookIn:=xlValues, lookat:=xlPart)
If Not rngFound Is Nothing Then
firstAddress = rngFound.Address
wks.Cells(rngFound.Row, 5) = wks.Cells(Zelle.Row, 7).Value
Do
Set rngFound = .FindNext(rngFound)
If Not rngFound Is Nothing Then
wks.Cells(rngFound.Row, 5) = wks.Cells(Zelle.Row, 7)
End If
Loop While Not rngFound Is Nothing And rngFound.Address <> firstAddress
End If
End With
End If
Next Zelle
Application.ScreenUpdating = True
End Sub
Sub Arbeitsplangruppenzuordnung()
Dim lngZ As Long, i As Long
Dim Zelle As Range
Dim rngFound As Range
Dim firstAddress As String
Dim wks As Worksheet
Set wks = Sheets("Stammdaten")
Application.ScreenUpdating = False
With wks
lngZ = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range("E4:E" & lngZ).ClearContents
End With
For Each Zelle In wks.Range("Tabelle5")
If Zelle <> "" Then
With wks.Range("C4:C" & lngZ)
Set rngFound = .Find(Zelle, LookIn:=xlValues, lookat:=xlPart)
If Not rngFound Is Nothing Then
firstAddress = rngFound.Address
wks.Cells(rngFound.Row, 5) = wks.Cells(Zelle.Row, 7).Value
Do
Set rngFound = .FindNext(rngFound)
If Not rngFound Is Nothing Then
wks.Cells(rngFound.Row, 5) = wks.Cells(Zelle.Row, 7)
End If
Loop While Not rngFound Is Nothing And rngFound.Address <> firstAddress
End If
End With
End If
Next Zelle
Application.ScreenUpdating = True
End Sub
Nee, der lässt mein EXEL abschmieren...(Keine Rückmeldung für länger als 15min)
Hast du noch eine andere Idee?
gehe ich davon aus, dass Tabelle5 die Wertetabelle ist in der die einzelnen Bgriffe stehen und nach diese in Spalte C in Tabelle "Stammdaten" gesucht wird.
Wenn diese anders heißt oder sich nicht in Stammdaten befindet, dann musst Du einmal den Namen anpassen und zum zweiten den Bezug zu Stammdaten lösen.
Angenommen die Tabelle hieße Tabelle59, dann änder die Zeile so um:
gehe ich davon aus, dass Tabelle5 die Wertetabelle ist in der die einzelnen Bgriffe stehen und nach diese in Spalte C in Tabelle "Stammdaten" gesucht wird.
Wenn diese anders heißt oder sich nicht in Stammdaten befindet, dann musst Du einmal den Namen anpassen und zum zweiten den Bezug zu Stammdaten lösen.
Angenommen die Tabelle hieße Tabelle59, dann änder die Zeile so um:
Code:
For Each Zelle In Range("Tabelle59")
Hallo Atilla,
ich habe alles so angepasst wie ich denke das es funktioniert.
Leider ist mein Wissen in VB zu gering dass ich meine Fehler selbst korrigieren kann.
Was mich allgemein in EXEL durcheinander bringt, ist die Tabellennummerierung in Bezug auf die Arbeitsblattnamen. Diese scheinen irgendwie miteinander Verknüpft.
Also hier noch mal meine Originaltabelle wie ich momentan damit arbeite.
Leer geräumt und nur für unseren Test die relevanten Daten enthalten.
Ich denke wir können wieder zurück auf die Tabellennummern zugreifen.
Damit sollte es ja auch klar definierbar sein.
Das ist ja für die Wertetabelle (Tabelle59) auch schon so.
Wenn du dann die Arbeitstabelle (Tabelle5) auch im Code definierst sollte es doch keine Missverständnisse mehr geben oder?!
Sub Arbeitsplangruppenzuordnung()
Dim lngZ As Long, i As Long
Dim Zelle As Range
Dim rngFound As Range
Dim firstAddress As String
Dim wks As Worksheet
Set wks = Sheets("Stammdaten")
Application.ScreenUpdating = False
With wks
lngZ = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range("F4:F" & lngZ).ClearContents
End With
For Each Zelle In Range("Tabelle59")
If Zelle <> "" Then
With wks.Range("C4:C" & lngZ)
Set rngFound = .Find(Zelle, LookIn:=xlValues, lookat:=xlPart)
If Not rngFound Is Nothing Then
firstAddress = rngFound.Address
wks.Cells(rngFound.Row, 6) = Range("Tabelle59").Cells(Zelle.Row - 1, 1).Value
Do
Set rngFound = .FindNext(rngFound)
If Not rngFound Is Nothing Then
wks.Cells(rngFound.Row, 6) = Range("Tabelle59").Cells(Zelle.Row - 1, 1).Value
End If
Loop While Not rngFound Is Nothing And rngFound.Address <> firstAddress
End If
End With
End If
Next Zelle
Application.ScreenUpdating = True
End Sub
Sub Arbeitsplangruppenzuordnung()
Dim lngZ As Long, i As Long
Dim Zelle As Range
Dim rngFound As Range
Dim firstAddress As String
Dim wks As Worksheet
Set wks = Sheets("Stammdaten")
Application.ScreenUpdating = False
With wks
lngZ = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range("F4:F" & lngZ).ClearContents
End With
For Each Zelle In Range("Tabelle59")
If Zelle <> "" Then
With wks.Range("C4:C" & lngZ)
Set rngFound = .Find(Zelle, LookIn:=xlValues, lookat:=xlPart)
If Not rngFound Is Nothing Then
firstAddress = rngFound.Address
wks.Cells(rngFound.Row, 6) = Range("Tabelle59").Cells(Zelle.Row - 1, 1).Value
Do
Set rngFound = .FindNext(rngFound)
If Not rngFound Is Nothing Then
wks.Cells(rngFound.Row, 6) = Range("Tabelle59").Cells(Zelle.Row - 1, 1).Value
End If
Loop While Not rngFound Is Nothing And rngFound.Address <> firstAddress
End If
End With
End If
Next Zelle
Application.ScreenUpdating = True
End Sub
So, diesmal ist es durch gerockt.
Meine Daten sind einsortiert. DANKE!!
Ich hab mir die Änderungen im Code auch schon angeguckt.
Wenn man es dann sieht macht es auch Sinn...nur erst mal drauf kommen.
Ich hoffe das ich es hiermit dann auch bei weiteren Änderungen selbst hin kriege.
Auf jeden Fall nochmal danke an Alle für die Hilfe.