Clever-Excel-Forum

Normale Version: Hilfe bei Range die immer eine Zeile nach unten springt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, 

ich sitze gerade an der Auswertung zu meiner Bachelorarbeit und muss zu jeweils 4000 Werten aus einer Tabelle eine bestimmte Anzahl von Werten vorher kopieren (z.B.250) , um mit denen dann Weiterrechnen zu können. Bisher hab ich es nur geschafft per Range einmal diesen Wert zu kopieren, es wäre aber sehr zeitsparend wenn man den Makro so schreiben könnte, dass zu jedem Wert aus der Tabelle die Werte davor kopiert werden. Ist es möglich, dass die Anzahl der Werte immer gleich bleibt, aber die Range sich um eine Spalte nach unten verschiebt? 

Über jede Hilfe wäre ich sehr dankbar!
Lade doch bitte eine bsp Datei mit deinem Versuch hoch!
Hallo,

ungeprüft:

Code:
Anzahl = 250

for i = 1 to cells(rows.count,1).end(xlup).row step Anzahl
    set rng = range(cells(i,1), cells(i,1).offset(Anzahl))
    'Ausgewählter Bereich: rng
next i

mfg
Wie kann sich etwas um eine Spalte nach unten verschieben?

Außerdem hast du zwar geschrieben, dass du den Bereich kopieren willst. Was weiterhin damit geschehen soll, verschweigst du aber.
Hallo Zusammen, 
das ist die Tabelle die ich als Grundlage habe.[attachment=25176]
Zu den gelb markierten Werten muss ich jeweils die 250 Zeilen zuvor aus der gesamten Tabelle kopieren, da ich diese in meinem Fall brauche um die abnormale Rendite berechnen zu können. 
Bisher konnte ich immer nur jeweils einen Wert per VBA auswählen und kopieren und hab das so gemacht: 

Sub test()
Worksheets("Tabelle1").Range("A7:C257").Copy _
    Destination:=Worksheets("Tabelle1").Range("E2")
    
End Sub

Jedoch ist dies sehr aufwendig für jede einzelne markierte Zelle zu machen und daher wollte ich fragen, ob es eine Möglichkeit gibt, dass die Range sich immer um einen Anfangswert nach unten verschiebt, in dem Fall dann zu  A8:C258 usw. 

Entschuldigt mein Unwissen ich bin absoluter Anfänger in VBA und freue mich über jede Hilfe.
Hallo robertfranke,
Sub test()
With ActiveCell
If .Column = 1 Then
.Resize(250, 3).Copy Range("E2")
End If
End With
End Sub
Gruß Uwe
Danke Uwe für deine Antwort, 

ich habs leider immer noch nicht hinbekommen, der Befehl wird bei mir irgendwie nicht ausgeführt. Ich probiere aber weiterhin noch! Trotzdem danke:)
Hallöchen,

Zitat:bestimmte Anzahl von Werten vorher kopieren (z.B.250)

Dein gelb markierter Bereich beginnt in Zeile 7, da gibt es keine 250 Zeilen davor Smile. Die gelb markierten Werte sind auch Daten, da weiß ich nicht, was rauskommen soll, wenn Du dazu eine Rendite addierst. Da wird vielleicht aus dem 18.12.18 00:00 Uhr dann der 18.12.18 01:14

Uwes Lösung funktioniert, wenn Du in Spalte A eine Zelle markiert hast. Von dieser Zelle aus werden einschließlich der markierten Zelle nachfolgend 250 Zellen und 3 Spalten kopiert und in bzw. ab E2 eingefügt. Du musst also anschließend nur eine Zelle tiefer gehen, das Makro ausführen und es werden von dort aus 250 x 3 Zellen kopiert. Du hast dann also in Spalte E die Daten und in den beiden Folgespalten die Renditen usw.


Zitat:daher wollte ich fragen, ob es eine Möglichkeit gibt, dass die Range sich immer um einen Anfangswert nach unten verschiebt

man könnte das in einer Schleife realisieren. Da hast Du aber nicht viel davon, weil am Ende ja die Zeile 2 stehenbleibt und alles zwischendrin ist überschrieben. Alternativ könntest Du Dir im Makro die gerade kopierte Zeile merken und bei der nächsten Ausführung eins davon abziehen und diese Zeile nehmen. Zum "merken" kannst Du z.B. eine Zelle nehmen. Dort trägst Du am Anfang den Startwert (Startzeile) ein und legst dann los.

Hier mal mit Deinem Makro und dem ...Resize... von Uwe

Code:
Sub test()
Dim Zeile%
'Eintrag in Z1 auslesen
Zeile = Range("Z1").Value
Worksheets("Tabelle1").Cells(Zeile,1).Resize(250,3).Copy _
   Destination:=Worksheets("Tabelle1").Range("E2")
'Eintrag in Z1 für naechste Ausfuehrung um 1 reduzieren
Range("Z1").Value = Zeile - 1    
End Sub