Registriert seit: 02.07.2019
Version(en): 2018
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!
Registriert seit: 02.12.2017
Version(en): Office 365
Lade doch bitte eine bsp Datei mit deinem Versuch hoch!
Registriert seit: 06.12.2015
Version(en): 2016
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
Registriert seit: 02.05.2018
Version(en): Excel 365 & 2016
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.
Schöne Grüße
Berni
Registriert seit: 02.07.2019
Version(en): 2018
Hallo Zusammen,
das ist die Tabelle die ich als Grundlage habe.
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.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
03.07.2019, 14:04
(Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2019, 14:04 von Kuwer.)
Hallo robertfranke,
Sub test()
With ActiveCell
If .Column = 1 Then
.Resize(250, 3).Copy Range("E2")
End If
End With
End Sub
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• robertfranke
Registriert seit: 02.07.2019
Version(en): 2018
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:)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
08.07.2019, 18:37
(Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2019, 18:38 von schauan.)
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

. 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
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)