In Excel mit Makro bestimmte Bereiche in erste freie Zeile kopieren
Hallo Zusammen, Ich habe erst gestern begonnen zu versuchen mich ein wenig in Makro einzuarbeiten hab dementsprechend nicht allzu viel Ahnung. . Ich habe in meiner Tabelle Statistiken zu der Kursentwicklung mehrerer Aktien, Also z.B. 1 Aktie, 1. Spalte: Datum, 2.Spalte: Kurs zu diesem Datum usw. Ab Spalte Q beginnt das gleiche dann für Aktie 2, ab Spalte AG dann Aktie 3 usw. Jetzt will ich dass diese Daten untereinander stehen. Also dass unter den Daten von Aktie 1 eine Zeile freigelassen wird und dann die Daten von Aktie 2 kommen. Ich muss dazu also für Aktie 2 die Spalten Q-AF und die Zeilen 1-89 kopieren und das ganze einfügen in Zelle A91. Ich hab mal bissel rumprobiert und habe mir dieses Makro zusammengeschustert: Sub neu()
'** Ermittlung der letzten Spalte in Zeile 1 ls = Cells(1, Columns.Count).End(xlToLeft).Columns.Column '** Durchlauf aller Zeilen Dim s As Integer For s = ls To 1 Step -1 'Zählung rückwärts bis Spalte 1 '** Abfragen, ob in der ersten Spalte Datum steht If Cells(1, s).Value = "Date" Then '** Wenn Datum steht dann soll die Range ab Datum 90 Zeilen nach unten und 17 Spalten nach rechts kopiert werden Range(Cell(1, s), Cell(90, s & 17)).Select
Selection.Copy
Range("A65536").End(xlUp).Paste End If
Next s End Sub
Leider funktioniert das so offensichtlich nicht. Würde mich freuen, wenn mir jemand helfen könnte. Danke schonmal im Voraus
2 Antworten
Oh hab nicht gesehen dass man manuell Textumbrüche machen muss, sorry. Jetzt ist das Makro bissel übersichtlicher
Sub neu()
'** Ermittlung der letzten Spalte in Zeile 1
ls = Cells(1, Columns.Count).End(xlToLeft).Columns.Column
'** Durchlauf aller Zeilen
Dim s As Integer
For s = ls To 1 Step -1 'Zählung rückwärts bis Spalte 1 '** Abfragen, ob in der ersten Spalte Datum steht
If Cells(1, s).Value = "Date"
Then '** Wenn Datum steht dann soll die Range ab Datum 90 Zeilen nach unten und 17 Spalten nach rechts kopiert werden
Range(Cell(1, s), Cell(90, s & 17)).Select
Selection.Copy
Range("A65536").End(xlUp).Paste
End If
Next s
End Sub
noch besser wärs den code mit ctrl-K zu formatieren. dann bleibt die struktur des textes erhalten. - beim nächsten mal.
Range(Cell(1, s), Cell(90, s & 17)).Select
- ist zwar syntaktisch richtig s & 17 ergibt aber eine string-verkettung, bei s=3 also 317. ich denke du meinst aber s + 17 (=20).
- warum rollst du das von hinten auf? ich würde erst eine frei zeile ermitteln, dann von links nach rechts die alten zellen umkopieren, bis nix mehr da ist.
- Ja ich meine s+17 = 20. Also wenn s=3 ist (=C), will ich die Range (C1:C90+17). = (C1:T90) Wie mache ich das?
- Das mache ich einfach nur weil ich das in nem Forum bei nem ähnlichen Problem so gesehen habe =)