Naja, das kommt eben darauf an...
08.09.2016 15:00:34
Michael
Marsl,
... wie Deine Quell-Tabellenblätter so aufgebaut sind. Aufpassen musst Du bei folgenden Zeile im Code:
Const R_ID$ = "E2"
Hier legst Du fest in welcher Zelle der Quelldatei jener Wert steht, nach dem die Ziel-Spalte bestimmt wird. In Deinem ersten Beitrag war das noch C1. Wenn in dieser Zelle kein Wert vorhanden ist, wird's kritisch.
Set WsQ = WbQ.Worksheets(1)
ID = WsQ.Range(R_ID).Value
Hier lege ich fest, dass die w.o. bestimmte Zelle auf dem ersten (!) Blatt der Quell-Datei zu finden ist - Du hast ja nicht angegeben, ob es da evtl. mehrere Blätter gibt.
Set rSuch = .Range(.Cells(1, 1), .Cells(1, 1).End(xlToRight))
Hier legst Du fest wo der (ich nenne ihn so) "ID-Wert", also der Wert jener Zelle der Quell-Datei, die Du w. o. definierst, gesucht wird. So wie es von mir geschrieben ist gehe ich davon aus, dass im Zielblatt die zu durchsuchenden Werte in Zeile 1 ab A1 stehen, und zwar lückenlos (!) - wenn dazwischen Leerzellen vorkommen können, müsste das so lauten
Set rSuch = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft))
Dann noch
With WsQ
.Range("E5:E" & .Cells(.Rows.Count, 3).End(xlUp).Row).Copy
End With
Hier legst Du fest welcher Bereich des Quell-Tabellenblattes kopiert wird. Aber Achtung: So wie es jetzt dasteht heißt das, dass Du den Bereich E5:Ex kopierst, wobei sich aber das "x" aus der letzten gefüllten Zelle der Spalte C (= Spalte 3) bildet. Du willst aber vermutlich das Spaltenende von E, d.h. Du müsstest hier auch anpassen:
With WsQ
.Range("E5:E" & .Cells(.Rows.Count, 5).End(xlUp).Row).Copy
End With
...denn E = Spalte 5.
Und natürlich sorgt noch diese Zeile:
If Not IsError(Sp) Then
dafür, dass überhaupt nichts kopiert wird, wenn eine "ID" (also der Zell-Wert aus C1, wie im Bsp, oder E2 wie jetzt in Deiner Antwort) nicht in dem w.o. definierten Bereich gefunden wird.
Das also aufdröseln vermagst nur Du, weil Du Deine Dateien/Tabellen kennst.
LG
Michael