Moin!
Ne, hat mich eher ein wenig verwirrt. :-D Aber ich glaube ich weiß, was du haben möchtest. Blatt 1 ist dein Bezug. In Zeile 1 stehen die Monate ( drei Buchstaben des Monats mit Jahr) und in Spalte A die Blätter. Der Code soll dann zu jedem Monat und Blatt dort die 2. Zeile des zugehörigen Monats finden.
Der Code unten macht das. Da ich nicht genau weiß, wie die Datei wirklich aussieht. Er geht in Tabelle 1 die Zeile 1 durch. Wenn dort ein Eintrag ist der den Wert 16 enthält wird das als Monat interpretiert und in den anderen Tabellen gesucht. (könnte man auch ändern). Er würde also nicht nur Jan und Feb sondern alle Monate überprüfen. Da du gesagt, hast, dass die Dateien identisch sind (also die Namen so auch in den anderen Blättern), habe ich jetzt nicht mehr überprüft, ob es die dort gibt. Und die Blattnamen müssen auch vorhanden sein. Falls ein Eintrag in Spalte A kein Blattname ist, passiert in der Zeile nix - die wird dann ignoriert.
Schau mal bitte, ob das so passt. Schönen Sonntag noch
Sub übertrag()
Dim lzeile As Long
Dim lspalte As Long
Dim blätter()
Dim blatt
Dim anzahl As Long
Dim i As Long
Dim j As Long
Dim index
ReDim blätter(0)
anzahl = 0
For Each blatt In Worksheets
anzahl = anzahl + 1
ReDim Preserve blätter(anzahl)
blätter(anzahl) = blatt.Name
Next blatt
lzeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lspalte = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
For i = 5 To lzeile
If ActiveSheet.Cells(i, 1) <> "" Then
index = ActiveSheet.Cells(i, 1)
If UBound(Filter(blätter, index)) > -1 Then
For j = 1 To lspalte
If InStr(1, ActiveSheet.Cells(1, j), "16", vbTextCompare) Then
ActiveSheet.Cells(i, j) = Worksheets(index).Cells(2, Application.WorksheetFunction.Match(ActiveSheet.Cells(1, j), Worksheets(index).Rows(1), 0))
End If
Next j
End If
End If
Next i
End Sub
|