Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilen ohne Inhalte kopieren und löschen

Betrifft: Zeilen ohne Inhalte kopieren und löschen von: Martina
Geschrieben am: 08.10.2020 15:56:08

Hallo zusammen,

ich weiß das es etwas "unschön" ist sich einen Code aus einem Forum zu benutzen und diesen für seine Zwecke anzupassen. Da ich aber sehr neu in der VBA Welt bin und da Ideen habe, wusste ich mir nicht aders zu helfen und benötigte bitte Hilfe.

Ich habe eine Excel-Liste in welcher ab Zeile 8 in jeder 2 Zeile von B - Q Namen teils über Dropdown eingetragen werden. Nach jeder Zeile sind die Makros um die darüberliegende Zeile zu speichern.

Nun können Zeilen welche ich nicht mehr benötige einzeln per Makro in eine Datenbank kopier werden, und diese Zeile wird dann geleert. (Formeln, Rahmen, Bedingte Formatierungen und Farben bleiben an Ort und stelle)



Nun sollten die unteren Zeilen automatisch nach oben rutschen, sodass ich keine leeren Zeilen mehr habe (sollte eine zwischen drin die Datenbank gewandert sein) und immer nach untenscrollen muss. Ich kommen hier mit Cut.Destination nicht ganz zurecht, da mir dieses ja die komplette Zeile ausschneidet.

Sub Schaltfl?che1_Klicken()

Dim WsZiel As Worksheet
Dim wsQuelle As Worksheet
Dim i As Long
Dim j As Long
Set wsQuelle = ThisWorkbook.Worksheets("Tabelle1")
Set WsZiel = wsQuelle.Parent.Worksheets("Tabelle1")
With wsQuelle
i = 6
Do While i <= Cells(Rows.Count, 2).End(xlUp).Row 'keine Leerzellen in Spalte B!
If IsEmpty(.Cells(i, 2)) Then
.Range(Cells(Cells(i, 2).End(xlDown).Row, 2), Cells(Cells(i, 2).End(xlDown).Row, 10)).Cut  _
Destination:=.Cells(i, 2)
End If
i = i + 2
Loop
End With
Set wsQuelle = Nothing
End Sub

Ich was das ich Quelle und Ziel entfernen könnt aber vielleicht wird dann alles noch umgebaut.

Vielen Lieben Dank .

Betrifft: AW: Zeilen ohne Inhalte kopieren und löschen
von: Daniel
Geschrieben am: 08.10.2020 16:23:37

Hi

ich würde es so machen:
1. per formel die Zeilen kennzeichnen, die die bleiben mit der Zeilennummer und die die weg sollen, mit einem "x"
2. sortieren der Liste nach dieser Kennzeichnung, dann kannst du die Zellen in einem Rutsch "entfernen"
with wsQuelle.UsedRange
    with .Columns(.Columns.Count + 1)
        .formulaR1C1 = "=IF(RC2="""",""x"",Row())"
        .Formula = .value
        .EntireRow.Sort Key1:=.cells(1, 1), order1:=xlascending, Header:=xlno
        if .Cells(.Cells.Count, 1) = "x" then
             with  .SpecialCells(xlcelltypeconstants, 2).EntireRow
                 .Resize(10).Copy Destination:=wsZiel.Cells(2, 1)
                 .EntireRow.Clear
             end with
         end if
         .clearContents
      end with
end with
Gruß Daniel

Betrifft: AW: Zeilen ohne Inhalte kopieren und löschen
von: Yal
Geschrieben am: 08.10.2020 16:33:01

"unschön, Code aus einem Forum zu benutzen und diesen für seine Zwecke anzupassen"
--> ganz im Gegenteil, dafür ist es gedacht. Wichtig ist das Gehirnschmalz, das man selber reinbringt, und nicht nach stumpften Copy-paste mekern "es tut nicht".

Dein Problem ist ein alte Bekannter: Zeile 7 verschwindet, Zeile 8 wird Zeile 7, 9 --> 8, nächste Zeile ist das alte "9", alte "8" wird ignoriert.
Anstatt einen While, verwende einen For und zwar vom Ende zu Anfang (Step -1)
LetzteZeile = wsQuelle.Cells("B100000").End(xlUp).Row
For i = LetzteZeile To 2 Step -1
    If IsEmpty...
Next
Alternativ per Hand (ist mehr speed):
_ Hilfspalte einführen
_ Zeilennummer oder Reihe eintragen
_ sortieren, sodass leere Zeilen zusammen kommen (ev. Hilspalte dafür nötig)
_ leere Block löschen
_ nach Hilfspalte "originale Reihenfolge" sortieren
_ Hilfspalte löschen

Viel Erfolg
Yal

Betrifft: AW: Zeilen ohne Inhalte kopieren und löschen
von: onur
Geschrieben am: 08.10.2020 17:54:00

"ich weiß das es etwas "unschön" ist sich einen Code aus einem Forum zu benutzen und diesen für seine Zwecke anzupassen" - wieso ? dafür siond Foren wie dieses schliesslich (unter Anderem) da.

Du brauchst doch nur nach dem Cut die ganze Zeile zu löschen, dann rutscht alles brav nach oben.