VBA Excel Zeile bis Spalte X markieren

DSRocker

Lt. Junior Grade
Registriert
Juli 2011
Beiträge
329
Hallo zusammen,

bin schon seit drei Stunden auf der Suche nach richtigem Code...

Problemstellung:

Inhalt einer ausgewählten Zeile soll verschoben werden (nach oben); Es soll aber nicht die Zeile in ganzer Länge verschoben werden, sondern bis zu einer bestimmten Spalte... (versteht man das?)

Ansatz:
Private Sub nachOben_Click()
Dim VerschZeile As Long
VerschZeile = Selection.Row
If VerschZeile > 1 Then
Rows(VerschZeile).Cut
Rows(VerschZeile - 1).Insert Shift:=xlDown
Rows(VerschZeile - 1).Select
End If
End Sub

kann mir jemand weiter helfen???
 
Range(Cells(13, 2), Cells(13, 6)).Cut Destination:=Range(Cells(12, 2), Cells(12, 6))

verschiebt* Zeile 13, Spalte B bis F nach Zeile 12, Spalte B bis F.

*) eigentlich cut 'n' paste


Oder, wenn alles unter der Zeile auch 1 Zeile nach oben rutschen soll:

Range(Cells(12, 2), Cells(12, 6)).Delete Shift:=xlUp
 
Zuletzt bearbeitet:
das ist ja soweit ok!
aber... es ist ja nicht fix was verschoben werden soll... immer die selektierte Zeile!
 
die Spalten wären in diesem Fall fix! nur die Zeilen sind variabel!
 
zeile = ActiveCell.Row '= markierte Zeile

Range(Cells(zeile, 2), Cells(zeile, 6)).Cut Destination:=Range(Cells(zeile - 1, 2), Cells(zeile - 1, 6))
 
sieht schon mal gut aus:
Private Sub CommandButton1_Click()
Zeile = ActiveCell.Row
Range(Cells(Zeile, 2), Cells(Zeile, 14)).Cut Destination:=Range(Cells(Zeile - 1, 2), Cells(Zeile - 1, 14))
End Sub

wo packe ich jetzt den Befehl, dass die andere Zeile nach unten verschoben wird ein? und hiermit werden alle Formeln, die in den einzelnen Zellen drin sind komplett ausgeschnitten...
 
Welche andere Zeile? Willst du die beiden Zeilen - Zeile x und Zeile x+1 - miteinander vertauschen?

Wenn du das komplette Vorhaben auf einmal beschreibst, lässt es sich leichter lösen ;)


Wäre dein letzter Satz eine Frage, könnte man mit 'Ja' antworten.
 
hehe...
also:
Die Tabelle sieht so aus:
14 Spalten / Anzahl der Zeilen variiert
Die Zeilen werden mit Hilfe eines Formulars mit verschiedenen Werten befüllt.
Die Befüllung erfolgt chronologisch (wenn 1. Zeile voll, dann 2. nehmen...)

Ich muss allerdings diese Zeilen dann untereinander tauschen, ohne die Formeln, die in den einzelnen Zellen sind, zu löschen!

hoffe, dass es jetzt verständlich ist... :-)
 
Welche sind denn "diese Zeilen"?

Wenn du eine neue Zeile einfügst, muss diese neue Zeile mit der Zeile davor getauscht werden? (dann könnte man die neue Zeile ja gleich darüber einfügen)

Auch weiß ich nicht, welche Formeln du meinst. Wenn du eine Zeile verschiebst, verschiebst du auch die Formeln mit.

Vielleicht hast du mal eine Beispieltabelle.
 
Hallo,
anbei eine Beispieldatei!

Wie gesagt, die einzelnen Zeilen (Aktien) werden per Formular "eingebucht".
Da meine Exceltabelle über 40 Spalten geht, und einige der ersten Spalten zusammengefasst analysiert werden (Analyse geschieht in den nächsten Spalten!), muss ich die einzelnen Zeilen verschieben/tauschen...
 

Anhänge

Naja, meinte eher eine Tabelle, wo man dein Problem/Vorhaben sehen kann. Dass das eine tabellarische Auflistung wird, hab ich mir gedacht ;)

Vielleicht bin ich auch zu doof, also noch mal von vorne:

  1. Wenn du jetzt einen neuen Datensatz einfügst, landet der in Zeile 5? [Ja/Nein?]
  2. Welche Zeile soll dann mit welcher getauscht werden, welche Zeile soll nach oben rutschen, welche nach unten? [Wenn in Zeile x ein neuer Datensatz eingefügt wird, soll Zeile y um 1 nach oben, Zeile z um eins nach unten rutschen?]
  3. Die Formel in Spalte G soll sich dabei verändern/nicht verändern? [Zellbezüge sollen - in welcher Art und Weise - angepasst werden/unverändert bleiben?]
 
1. ganz genau, weil die Zeile oben drüber belegt ist...
2. eine markierte Zeile (egal welche das ist) soll per Button nach oben oder auch nach unten verschoben werden; und der Inhalt der Zeile in die die markierte Zeile verschoben wird, wird dann halt mit der getauscht (damit keine Daten verloren / überschrieben werden)
3. Formeln bleiben alle erhalten!!!

also eigentlich funktioniert alles hiermit:

'markierte Zeile nach oben verschieben:
Private Sub nachOben_Click()
Dim Zeile As Long
Zeile = Selection.Row
If Zeile > 1 Then
Rows(Zeile).Cut
Rows(Zeile - 1).Insert Shift:=xlDown
Rows(Zeile - 1).Select
End If
End Sub

Problem ist hierbei: die gesamte Zeile wird verschoben.
Lösung soll sein: verschieben aber nur bis Spalte "P" oder so... diese Spalte bleibt aber dann auch fix!
 
Derselbe Code, nur eben mit Range()-Angaben, anstelle von Row().

'markierte Zeile nach oben verschieben:
Private Sub nachOben_Click()
Dim Zeile As Long
Zeile = Selection.Row
If Zeile > 1 Then
Range(Cells(Zeile, 3), Cells(Zeile, 7)).Cut
Range(Cells(Zeile - 1, 3), Cells(Zeile - 1, 7)).Insert Shift:=xlDown
End If
End Sub
 
Sehr gut!!!
habs noch erweitert, damit die zuvor ausgewählte Zeile auch nach dem sie verschoben wurde, weiterhin ausgewählt bleibt...

Vielen Dank an dieser Stelle!
 
Ich muss mich "leider" wieder melden:
kann ich bei dieser Cut / Insert-Funktion etwas einbauen, damit meine Rahmenlinien, Funktionen, und Formatierungen allgemein nicht verschoben werden?!
sowas wie Special.Paste ?!
 
Zurück
Oben