Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1232to1236
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

LeerZeilen löschen mit VBA

LeerZeilen löschen mit VBA
Sibylle
Guten Tag,
eine importierte Datei enthält Leerzeilen, die entfernt werden sollen, und zwar so, dass die Datensätze unter der Leerzeile nach oben rücken. Wie lässt sich dies mit VBA machen?
Ich bitte um Lösungsansätze oder fertige Lösungen, die ich dann umstricken kann.
Dank im Voraus.
Gruß
Sibylle

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Lösungsansätze oder fertige Lösungen
04.10.2011 12:03:14
Rudi
Hallo,
die findest du zuhauf im Archiv.
Gruß
Rudi
das trifft zu
04.10.2011 14:07:06
Sibylle
Hallo Rudi,
ich war erstaunt über das Angebot. Wird in Zukunft eine wichtige Quelle werden.
Gruß
Sibylle
hab ich jetzt getan. OK. (owT)
04.10.2011 14:05:27
Sibylle
Gruß Sibylle
AW: LeerZeilen löschen mit VBA
04.10.2011 12:20:22
Tino
Hallo,
kannst mal testen.

Sub LoescheLeere()
Dim iCalc%

With Application
    iCalc = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
    
    With Tabelle1.UsedRange 'Tabelle anpassen 
        With .Range(.Cells, .Columns(.Columns.Count).Offset(0, 1))
            .Columns(.Columns.Count).FormulaR1C1 = "=IF(COUNTA(RC1:RC[-1])>0,ROW(),TRUE)"
            .Sort Key1:=.Cells(1, .Columns.Count), Order1:=xlAscending, Header:=xlNo
            On Error Resume Next
                .Columns(.Columns.Count).SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
                .Columns(.Columns.Count).EntireColumn.Delete
            On Error GoTo 0
        End With
    End With
    
    .Calculation = iCalc
    .ScreenUpdating = True
    .EnableEvents = True
End With
End Sub
Gruß Tino
Anzeige
Zusatzfrage
04.10.2011 14:09:56
Sibylle
Hallo Tino,
ich danke Dir für das Programm. Der Test hat prima funktioniert.
Leider bin ich noch nicht so weit, den Code zu verstehen.
Kommentare zu den einzelnen Zeilen wären in dem Fall sehr hilfreich, aber das kann man ja nicht erbitten.
Gruß
Sibylle
hier der kommentierte Code
04.10.2011 14:44:52
Tino
Hallo,
es wird eine Hilfsspalte verwendet und in dieser wie im Code beschrieben eine Formel erstellt.
Diese Formel ergibt die Zeilennummer oder einen Wahrheitswert (Wahr).
Nach dieser Spalte wird sortiert und alle Zeilen mit Wahr in der Hilfsspalte
(die stehen alle unten zusammen) gelöscht.
Sortieren weil Excel zusammenhängende Bereiche schneller löschen kann
als wenn diese wild verstreut liegen.
Normalerweise würde das sortieren auch reichen weil dann alle Leerzeilen unten stehen,
aber wenn die Zellen Formatiert sind, wird Dein Benutzter Bereich (UsedRange) unnötig groß,
daher ziehe ich es vor diese Zeilen komplett zu löschen.

Sub LoescheLeere()
Dim iCalc%

With Application
    iCalc = .Calculation 'zustand Berechnung merken 
    .ScreenUpdating = False 'Bildschirmaktualisierung aus 
    .EnableEvents = False 'Events aus 
    .Calculation = xlCalculationManual 'Berechnung auf manuell 
    'benutzter Bereich der Tabelle 
    With Tabelle1.UsedRange 'Tabelle anpassen 
        'Benutzter Bereich + eine Hilfsspalte für Formel 
        With .Range(.Cells, .Columns(.Columns.Count).Offset(0, 1))
            'ergibt die Formel: =WENN(ANZAHL2($A1:C1)>0;ZEILE();WAHR) 
            'auf die Dollarzeichen achten 
            .Columns(.Columns.Count).FormulaR1C1 = "=IF(COUNTA(RC1:RC[-1])>0,ROW(),TRUE)"
            'Bereich nach Hilfsspalte sortieren, Excel kann zusammenhängende Bereiche schneller löschen 
            .Sort Key1:=.Cells(1, .Columns.Count), Order1:=xlAscending, Header:=xlNo
            On Error Resume Next 'Errorbehandlung 
                'Zeile mit Formelergebnis WAHR löschen 
                .Columns(.Columns.Count).SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
                'Hilfsspalte löschen 
                .Columns(.Columns.Count).EntireColumn.Delete
            On Error GoTo 0
        End With
    End With
    
    .Calculation = iCalc 'Berechnung auf alten stand 
    .ScreenUpdating = True 'Bildschirmaktualisierung ein 
    .EnableEvents = True 'Events ein 
End With
End Sub
Gruß Tino
Anzeige
Danke
04.10.2011 17:44:49
Sibylle
Hallo Tino,
das war nun wahrlich nicht zu erwarten. Ich bin begeistert und danke Dir für diese Arbeit.
Ich freue mich sehr, dass es nun möglich ist, das Programm in Ruhe zu durchdenken und die zahlreichen Feinheiten dieser Lösung zu studieren.
Ich will das Programm im Einzelschritt verfolgen und die Entwicklung zum Ergebnis beobachten.
Ob solche Lösungen auch mal von mir kommen werden? Im Moment sicher nicht.
Tausend Dank Tino.
Ich wünsche Dir einen schönen Abend.
Gruß
Sibylle
Ein kleines Problem ...
04.10.2011 18:25:04
Sibylle
Hallo Tino,
ich hab da eben folgenden Test gemacht:
A1 leer
A2 leer
A3 5
A4 leer
A5 3
A6 leer
A7 8
A8 leer
A9 6
A10 4
A11 leer
A12 11
dann bleibt A4 weiterhin leer, die Daten werden nicht bis zur Zeile 4 hochgezogen.
Der Rest klappt.
Was kann die Ursache sein?
Gruß
Sibylle
Anzeige
AW: Ein kleines Problem ...
04.10.2011 18:37:18
Tino
Hallo,
ok. versuch mal und mach aus der Zeile

With .Range(.Cells, .Columns(.Columns.Count).Offset(0, 1))

diese

With .Cells.Resize(, .Columns.Count + 1)
Gruß Tino
Perfekt
04.10.2011 19:29:22
Sibylle
Hallo Tino,
perfekt. Danke.
Gruß
Sibylle

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige