Excel 2010 Makro leere Zeilen löschen

Furble

Lt. Commander
Registriert
Jan. 2008
Beiträge
1.995
Hallo,

ich möchte ein kleines Makro erstellen, welches die Spalte C überprüft, um die erste leere Zelle zu markieren und ab dieser Zelle alle Zeilen zu löschen.

Ich habe diesen Code gefunden, um die erste freie Zelle zu markieren, nur wie lasse ich Excel dann alle Zeilen darunter löschen (Clear all contents reicht auch)?

Code:
Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Select 

End Sub

Danke im voraus! :)
 
Bezieht sich allerdings wie in deinem Beispiel nur auf Spalte 2! Oder brauchst du es für alle Spalten?

Code:
Sub a()

    Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Select
    Range( _
        Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2), _
        Cells(Cells(Rows.Count, 2).End(xlDown).Row, 2) _
    ).ClearContents
    
End Sub
 
Ich bräuchte es für alle Spalten... Den Code oben habe ich auch nur gegoogelt und verstehe ihn ehrlich gesagt nicht ganz.
 
Ja sind sie. Ich werde das morgen mal testen. Danke :)
Ergänzung ()

So ich hab es nun getestet...

es gibt leider zwei Probleme:

1. Man muss das Makro zwei mal ausführen, damit es "funktioniert"

2. irgendwie werden alle Zeilen darüber etwas verschoben. Das was vorher in Zeile 21 war ist nun z.B: in Zeile 19....

Eine Idee?
 
Moin,

hier einmal mit "wirklich" löschen:
Code:
Option Explicit

Sub RestLoeschen()   'By GMG-CC
   Dim lRowC As Long, lRowAll As Long
   Dim i As Long
   
   lRowC = Cells(Rows.Count, 3).End(xlUp).Row
   lRowAll = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
   
   For i = lRowAll To lRowC + 1 Step -1
      Rows(i).EntireRow.Delete
   Next i
End Sub
 
Hallo Günther,

vielen Dank dafür! Das ist der erste Code, der bei mir tut was er soll :D

Nur leider ist er mit einem sehr großen Rechenaufwand verbunden. Da das ganze bei mir nicht nur in einem Tabellenblatt, sondern in etwa zehn gemacht werden muss, dauert der ganze Prozess ziemlich lange. Auch Application.ScreenUpdating = False am Anfang schafft keine Abhilfe :(

Wenn ich es Richtig verstanden habe, geht der Code alle Zeilen einzeln durch. Kann man es auch so machen, dass er schaut ab wann nichts mehr in Spalte C steht und dann unter diesem letzten Eintrag alle Zeilen auf einmal löscht?

Ich wäre dir/euch sehr dankbar, wenn ihr dafür auch eine Lösung parat hättet.
 
Moin,

stimmt, in der For .. Next - Schleife wird wirtlich jede Zeile einzeln gelöscht. Be den (im Muster) wenigen Zeilen habe ich eher zu den Basics der Programmiererei gegriffen :evillol:

Und natürlich geht es "in einem Rutsch ..." Schau mal hier:
Code:
Option Explicit

Sub RestLoeschen() 'By GMG-CC'
    Dim lRowC As Long, lRowAll As Long
    Dim i As Long
    
    On Error GoTo ErrorHandler
    With Application
      .ScreenUpdating = False
      .Calculation = xlCalculationManual
    End With
    
    lRowC = Cells(Rows.Count, 3).End(xlUp).Row
    lRowAll = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
    Range("A" & lRowC + 1 & ":A" & lRowAll).EntireRow.Delete
ErrorHandler:
    With Application
      .ScreenUpdating = True
      .Calculation = xlCalculationAutomatic
      .Calculate
    End With
End Sub

Alternative wäre noch:
STATT
lRowAll = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Range("A" & lRowC + 1 & ":A" & lRowAll).EntireRow.Delete
deklarierst du erst gar nicht die Variable lRowAll und ersetzt die beiden Zeilen mit
Code:
        Range("A" & lRowC + 1 & ":A" & Rows.Count).EntireRow.Delete
dann wird der komplette Rest nach unten bis zur allerletzten Zeile 65536 (bei Versionen ab 2007 > 1.000.000) gelöscht.

Ich denke, das wird einiges an Geschwindigkeit bringen.
 
Hey,

super, das mit der Geschwindigkeit hat funktioniert! Nur ein letztes Problem gibt es noch: Durch das löschen der gesamten Zeile verschieben sich meine Formeln und funktionieren so leider nicht mehr.

Ich wollte es also mit .ClearContents fixen, also so:

Code:
Range("A" & lRowC + 1 & ":A" & Rows.Count).ClearContents

Leider löscht er dann gar nichts mehr.

Eine weitere Hilfestellung wäre super! :)

Vielen Dank!
 
Moin,

Durch das löschen der gesamten Zeile verschieben sich meine Formeln und funktionieren so leider nicht mehr.
Das verstehe ich nicht. Wenn unterhalb der letzten Zeile in Spalte_C nichts mehr ist, dann gibt es doch auch nichts anzupassen …

Lade noch einmal eine Tabelle hoch, wo das Problem sichtbar ist, Mit entsprechenden Kommentaren im Blatt.
 
Hi,

Das alte Problem konnte ich selbst lösen, eins gibt es jetzt noch: Das Makro löscht nicht unterhalb des letzten Eintrages in Spalte C alles, sondern einschließlich den letzten Eintrag. Kann das sein?

Wie kann ich das fixen?

Danke!
Ergänzung ()

Ich habe deinen ersten Lösungsvorschlag angewendet, nicht den wo alles bis Zeile 65536 gelöscht wird.
Ergänzung ()

okay, auch das konnte ich selbst durch folgenden Ausdruck lösen:

alt:
Code:
Range("A" & lRowC + 1 & ":A" & lRowAll).EntireRow.Delete

neu:
Code:
Range("A" & lRowC + 1 & ":A" & lRowAll + 1).EntireRow.Delete

Müsste so stimmen, oder? :)
Ergänzung ()

Letzte Frage :D :

Kann ich in Dokument1 ein Makro mit Schaltfläche erstellen, welches alles Blätter aus Dokument1 in Dokument X (also mit variablen Namen), das auch geöffnet ist, kopiert?
 
Zuletzt bearbeitet:
Moin,

Müsste so stimmen, oder?
Ja. War ein Flüchtigkeitsfehler von mir.
Letzte Frage :

Kann ich in Dokument1 ein Makro mit Schaltfläche erstellen, welches alles Blätter aus Dokument1 in Dokument X (also mit variablen Namen), das auch geöffnet ist, kopiert?
Hmmm, worüber unterhalten wir uns? 1 Arbeitsmappe (Datei) mit n Tabellenblättern?
Mehrere geöffnete Mappen mit n Tabellenblättern?
Noch eine andere Konstellation?
 
Dokument1 hat zwei Blätter mit immer denselben Namen (sagen wir Tabelle1 und Tabelle2). Dokument x hat einen variablen Namen und unterschiedlich viele Blätter mit unterschiedlichen Namen.

Die beiden Blätter aus Dokument1 sollen einfach an den Anfang von Dokument x kopiert werden. Dokument x ist gleichzeitig geöffnet.

Danke :)
 
Ah ja …

das ist aber eine ganz andere Baustelle. Zwar die gleiche Datei. Und auch wohl nicht so schwer. Aber ich muss nun etwas Geld verdienen. Da lasse ich nun mal andere ran :).
Mein Tipp: So richtig schlau werde ich aus deiner Beschreibung immer noch nicht, vielleicht ein detaillierteres Beispiel …
 
Alles klar, vielen Dank soweit! Ohne deine Hilfe wäre ich verloren gewesen! :D

Mein Problem werde ich später nochmal detailierter beschreiben.

Hättest du vielleicht noch einen Tipp wo ich mir solide Grundkenntnisse zu Excel Makros aneignen kann? Alles was ich bisher "programmiert" habe, habe ich über den Makro-Recorder gelöst order mir ergooglet..

Liebe Grüße!
 
Wie genau willst du bestimmen, in welche Mappe reinkopiert werden soll? Sagst du einfach, es sind grundsätzlich nur zwei offen und du willst in die andere kopieren? Du könntest auch ein Auswahlfenster öffnen lassen, in welche Mappe kopiert werden soll. Wäre wahrscheinlich sauberer, wenn auch ein Klick mehr beim Ausführen.
 
Moin,

aufzeichnen ist schon mal gut. Allerdings musst du da reichlich nachbearbeiten, wenn der Code einigermaßen "sauber" sein soll. Und wenn es nicht zu viel Code ist, einfach hier mal einstellen und um "verschlanken" bitten. Da lernst du dann so einiges.

Dann natürlich Fachliteratur. Die Bücher von Microsoft Press sind IMHO sehr gut, M&T ist auch gut lesbar. Deine Stadtbücherei kann dir die Bücher auch zur Ausleihe besorgen.

Und wenn du im Job bist, kann es vielleicht sein, dass du Bildungsurlaub bekommst (hängt vom Bundesland ab) und deine Volkshochschule solch ein Seminar anbietet.

Und wenn dein Chef es möchte, kann er jemanden organisieren, der fas (gegen Honorar) macht. Das ist bei kleinen Gruppen und gezielter Problemlage am effizientesten.
 
simpsonsfan schrieb:
Wie genau willst du bestimmen, in welche Mappe reinkopiert werden soll? Sagst du einfach, es sind grundsätzlich nur zwei offen und du willst in die andere kopieren? Du könntest auch ein Auswahlfenster öffnen lassen, in welche Mappe kopiert werden soll. Wäre wahrscheinlich sauberer, wenn auch ein Klick mehr beim Ausführen.

Wäre mir beides Recht, wobei wie du schon meintest letztere Möglichkeit "sauberer" wäre. Würde mich über einen Code freuen :)

@Günther: Danke für die vielen Tipps! Ich werde die eine oder andere Sache ausprobieren :)
 
Zurück
Oben