Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Z verschieben

Z verschieben
Peter
Hallo
ich bin auf der suche nach einem makro, dass jede zweite zeile in die darüberliegende zeile verschiebt.
folgende inhalte sind gefüllt
a1..z1
a2..z2
a3..z3
usw
Das Makro soll die a2..z2 hinter die a1..z1 verschieben aa1..az1
dito soll die 4. zeile (zeilenbereich) hinter den 3. Zeilenbereich verschoben werden.
Da es seeehr viele Zeilen sind möchte ich das gern per makro lösen
kurzgefasst: verschiebe den inhalt jeder zweiten zeile hinter den inhalt der ersten zweile
und lösche danach alle leerzeilen
freu mich auf eine antwort
gruss peter

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Z verschieben
17.08.2009 13:00:47
Wolli
Hallo Peter, kein Makro nötig.
1.) Per Formel die Werte hochziehen (in AA1 "=A2" eingtragen, nach rechts kopieren, dann mit der darunterliegenden Leerzeile zusammen nach unten kopieren.#
2.) alles kopieren, Bearbeiten - Inhalte einfügen - Werte
3.) per AutoFilter oder Sortierung die Leerzeilen anzeigen und löschen.
Gruß, Wollil
AW: Z verschieben
17.08.2009 13:21:13
Peter
hey wollil
ja, so mach ich es bislang
nur müssen so ein paar hundert dateien geändert werden, und dann ist das verfahren per makro
sicher "einfacher" ;)
dank dir trotzdem für den tip
gruss peter
AW: Z verschieben
17.08.2009 14:14:44
Peter
frage ist noch offen ;)
AW: Z verschieben
17.08.2009 19:30:14
Gerd
Hallo Peter,
deine Fragestellung ist mir noch nicht ganz klar.
Geht es "pro Zeile" immer nur um den Wert einer Zelle?
Stehen diese Werte immer in einer bestimmten Spalte?
Sollen die hochgeholten Werte in die Nachbarzelle rechts
oder dem dort vorhandenen Wert in der selben Zelle
ggf. mit Leerzeichen dazwischen angefügt werden?
Gruß Gerd
Anzeige
AW: Z verschieben
17.08.2009 21:25:00
Peter
hallo gerd,
ja - ok - sollte etwas klarer formulieren :)
in den zellen a1 bis z1 stehen werte
in den zellen a2 bis z2 stehen werte
die werte der zellen a2 bis z2 sollen sollen in die zellen aa1 bis az1 verschoben werden
also in die zellen neben a1..z1
hoffe, dass es diesmal etwas klarer von mir formuliert ist :O
gruss peter
AW: Z verschieben
17.08.2009 22:13:49
hary
Hallo Peter
Teste dies mal in einer Kopie Deiner tabelle. Auch wegen der Geschwindigkeit.

Sub n()
Dim i As Long
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
Range("a" & i & ":Z" & i).Cut Range("AA" & i - 1)
Next
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Application.ScreenUpdating = False
End Sub

Gruss Hary
Anzeige
AW:kleiner fehler
17.08.2009 22:23:16
hary
hallo
Missgeschick.
letztes aendern in:

Application.ScreenUpdating = True

Gruss Hary
AW: Z verschieben
18.08.2009 10:12:56
Peter
hallo hary
vielen dank für den code - funktioniert perfekt !
jetzt zeichnet es sich ab, dass die inhalte der ersten zeile manchmal bis spalte z geht, manchmal aber auch bis spalte ak ... also: die letztbefüllte spalte ist nicht immer eindeutig
kann man das makro so ändern, dass er die inhalte der zweiten spalte immer NACH der letztbefüllte spalte der ersten zeile einfügt ?
also: wenn die letzte spalte Z ist - füge in spalte AA ein / wenn die letzte spalte AK ist - füge in AL ein / usw
ideal wäre es natürlich auch, wenn jede zweite zeile nach dem verschieben automatisch gelöscht wird
das wäre dann superperfekt :)
besten gruss peter
hier den code, den ich bis heute nutze
Sub Zeile2inZeile1()
Dim i As Long
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
Range("a" & i & ":BZ" & i).Cut Range("CA" & i - 1)
Next
Leere_Spalten_loeschen
Application.ScreenUpdating = True
End Sub

Sub Leere_Spalten_loeschen()
'lösche alle leeren Spalten
Dim Spalte As Integer
Application.ScreenUpdating = False
For Spalte = 256 To 1 Step -1
If Application.CountA(Columns(Spalte)) = 0 Then
Columns(Spalte).Delete
End If
Next
Application.ScreenUpdating = True
End Sub

Sub JedeZweiteZeileLoeschen()
'dauert ziemlich lange ;(
Application.ScreenUpdating = False
For l& = 65536 To 2 Step -2  'ggfs anpassen an letzte gefüllte Zeile
Rows(l & ":" & l).Select
Selection.Delete Shift:=xlUp
Next l
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Z verschieben
18.08.2009 12:16:25
hary
Moin Peter
das geht so(hoffe ich).Bin noch nicht ausgeschlafen.

Sub n()
Dim i As Long
Dim Spalte
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2 'jede gerade Zeile
Spalte = Cells(i - 1, Columns.Count).End(xlToLeft).Column 'letze Spalte in jeder  _
ungeraden Zeile
Range(Cells(i, 1), Cells(i, Cells(i, Columns.Count).End(xlToLeft).Column)).Cut Cells(i - 1, _
Spalte + 1)  'Bereich ausschneiden
Next
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'leere zeilen löschen
Application.ScreenUpdating = True
End Sub

Gruss Hary
Anzeige
AW: Z verschieben
18.08.2009 20:36:05
Peter
Hey hary
klasse ! funktioniert perfekt
da die erste spalte A leer ist (da die zelle a1 im ursprung auch leer ist)
musste ich noch den code erweitern um "leere spalten löschen"
bin mal gespannt, wie lange die laufzeit ist für das löschen von 50.000 zeilen -jede 2. ist ja leer- bei
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'leere zeilen löschen
kann ich morgen mal "nachmelden"
somit sieht mein code wie folgt aus:
Sub Zeile2_in_Zeile1()
Dim i As Long
Dim Spalte
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2 'jede gerade Zeile
Spalte = Cells(i - 1, Columns.Count).End(xlToLeft).Column 'letze Spalte in jeder  _
ungeraden Zeile
Range(Cells(i, 1), Cells(i, Cells(i, Columns.Count).End(xlToLeft).Column)).Cut Cells(i - 1, _
Spalte + 1)   'Bereich ausschneiden
Next
Leere_Spalten_loeschen
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'leere zeilen löschen
Application.ScreenUpdating = True
End Sub
Sub Leere_Spalten_loeschen()
Dim Spalte As Integer
Application.ScreenUpdating = False
For Spalte = 256 To 1 Step -1
If Application.CountA(Columns(Spalte)) = 0 Then
Columns(Spalte).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
besten dank
peter
Anzeige
AW:Frage
19.08.2009 08:19:24
hary
Moin Peter
Ist SpalteA komplet leer? oder nur zelleA1?
das loeschen von den leeren Spalte kann man auch dranhaengen. Und brauchst Du die schleife wirklich von der ersten bis allerletzten Spalte?
Kannst Du sonst verkuerzen wenn Du statt 256 von meinem Code das hinter Spalte nimmst.
Das loeschen der leeren Zeilen ist schon die schnellere Art. Ist keine Schleife.
Ist bloss bei der Masse der Zeilen die Geschwindigkeit. Bin mal gespannt, hab's nicht mit 50000 getestet.
Gruss hary
AW: AW:Frage
19.08.2009 13:50:54
Peter
hallo hary
erstmal zur beantwortung deiner frage:
die inhalte der zeile 1 und 2 sind unterschiedlich.
z.b. ist die zelle a1 immer leer, dann sind die zellen in zeile 1 immer mal gefüllt, mal leer.
dito für die zweite zeile.
deshalb lasse ich die leerSPALTEN mit dem makro löschen - funktioniert auch sehr schnell.
merkwürdig ist nur, dass der code zur löschung der leeZEILEN die kompletten inhalte des tabellenblattes löscht.
Es sind aber definitiv in jeder 2. zeile (ab der spalte a) inhalte enthalten :O? (es sind immer 2 Buchstaben)
irgendwie werde ich daraus nicht schlau
zuhause bei einer einer kleineren datei (ca 1000 zeilen) hatte es funktioniert.
hier auf der arbeit ist die datei 34000 zeilen lang.
hast du einen tip woran das liegt, dass ALLES gelöscht wird ?
ich hab auch mal den weg wie folgt probiert:
spalte a markieren - dann bearbeiten - gehe zu - inhalte - leerzellen
dann schreibt excel: markierung zu gross
kann es sein, dass "range("a:a") das gleiche macht ?
bin am rätseln :(
gruss peter
Anzeige
AW: AW:Frage
19.08.2009 14:40:33
Peter
hallo hary
ich hab die 34.000 zeilen datei mal auf 15000 reduziert (indem ich manuell die zeilen gelöscht habe)
dann funktioniert "range ("A:A")...
Laufzeit des makros bei 15000 zeilen ca 2 minuten
darüber (z.B. bei 20000 zeilen) löscht er alles sofort - nach ca 5 sekunden
gruss peter
Sub LeerZeilen()
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

AW:getestet
19.08.2009 14:52:41
hary
Hallo
Bei mir passiert das gleiche. Hab zwar einen Trick gefunden, aber der dauert viel zu lange.
Das einzige was mir im Moment einfaellt ist:
Das loeschen aus dem Code nehmen und statt dessen den Autofilter benutzen. Nur befuellte Zeilen zeigen.
Gruss hary
Anzeige
AW: AW:getestet
19.08.2009 15:04:59
Peter
hallo hary
jupp - das ist auch eine gute idee von dir via autofilter
jetzt hast du mir schon die allerwichtigsten tips gegeben - das makro läuft wunderbar
und wird mir in der zukunft viel arbeit abnehmen
dank dir dafür nochmals seeeehr !
und jetzt kommt mein kleiner tip:
nutz nicht den autofilter sonder sortiert die tabelle nach einer geeigneten spalte
... und schwupps sind die leerspalten nach unten sortiert *g*
besten dankes-gruss peter
AW: na dann!
19.08.2009 17:27:45
hary
Hallo Peter
Mit dem Filter fiel mir so beim schreiben ein. So gehts am schnellsten und mit dem Recorder kannst Du es ja auch aufnehmen.
Gruss und einen sonnigen Abend
Hary
Anzeige
AW: Z verschieben
17.08.2009 23:23:36
Gerd
Hallo Peter!
nur müssen so ein paar hundert dateien geändert werden, und dann ist das verfahren per makro
sicher "einfacher" ;)

Wo liegen die Dateien?
Alle u. nur diese in einem bestimmten Pfad?
Ist immer nur eine Tabelle mit einem bestimmten Namen zu bearbeiten?
Sind die Spallten AA - AZ vorher leer?
Sollen nur die Werte oder auch die Zellenformate übertragen werden?
Gruß Gerd
AW: Z verschieben
18.08.2009 10:03:45
Peter
hallo gerd,
das mit den vielen dateien werde ich anders lösen müssen, da die dateien in den unterschiedlichsten (nicht fest definierten) verzeichnissen liegen.
aber dank dir sehr für die nachfrage.
besten gruss peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige