Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
852to856
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
852to856
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zeilen löschen

Zeilen löschen
08.03.2007 09:53:41
Fritz
hallo,
Habe ein Tabellenblat mit 1900 gefüllten Zeilen.
Wenn ich mit folgendem Makro alle Zeilen außer Leerzeilen löschen möchte, die nicht der Bedingung entsprechen, muß ich dieses Makro 3x laufen lassen, bis alle gelöscht sind.
Kann Excel nur eine bestimmte Anzahl an Zeilen bei einem Durchgang löschen?
Gruß und vielen Dank im Vorraus.
Fritz
Sub Namenlöschen() ' Löscht die Namen anderere Sportler
Worksheets("Auswertung").Select
Dim LetztezeileA
Dim Name
LetztezeileA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
a = LetztezeileA
Name = InputBox("Für welchen Sportler soll diese Datei sein?" & vbLf & _
" Alle anderen Sportler werden gelöscht", " Sportler auswählen", "Lugo")
For Each zelle In Range(Cells(7, 1), Cells(a, 1))
If zelle.Value <> Name Then _
zelle.Select
Selection.EntireRow.Delete
Application.CutCopyMode = False
End If
Next
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen
08.03.2007 10:19:00
Erich
Hallo Fritz,
der Code, wie du ihn hier gepostet hast, kann m. E. überhaupt nicht laufen:
Wegen des Unterstrichs hinter "Then" bezieht sich das If nur auf die Folgezeile "zelle.Select"
und eröffnet keinen If-Block. Dann gibt "End If" einen Fehler.
Warum schreibst du den Wert von LetztezeileA in eine weitere Variable a?
Eine Empfehlung:
Zu Beginn jedes Moduls eine Zeile "Option Explicit" einfügen und Variablen mit Typ deklarieren.
Hier mein Code-Vorschlag:
Option Explicit
Sub Namenlöschen() ' Löscht die Namen anderere Sportler
Dim LetztezeileA As Long, strName As String, lngZ As Long
Worksheets("Auswertung").Select
LetztezeileA = Cells(Rows.Count, 1).End(xlUp).Row
strName = InputBox("Für welchen Sportler soll diese Datei sein?" & vbLf & _
" Alle anderen Sportler werden gelöscht", " Sportler auswählen", "Lugo")
For lngZ = LetztezeileA To 7 Step -1
If Cells(lngZ, 1) <> strName Then Rows(lngZ).Delete
Next lngZ
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zeilen löschen
08.03.2007 10:20:58
Andi
Hi,
nein, Excel kann beliebig viele Zeilen in einem Durchgang löschen; das Problem besteht darin, dass Deine Schleife von oben nach unten vorgeht.
Angenommen die Zellen A10 und A11 entprechen Deinem Lösch-Kriterium; bei Zelle A10 angekommen, erkennt Dein Makro dies und löscht die Zeile 10. Soweit, so gut. Durch das löschen rutschen aber alle anderen Zeilen eins nach oben, die ehemalige Zelle A11 ist jetzt also A10. Beim nächsten Schleifendurchlauf wird aber die (neue) Zelle A11 überprüft, weil A10 war ja schon dran.
Deshalb gilt die Grundregel: Schleifen zum Löschen immer von unten nach oben laufen lassen
In Deinem Fall könnte das zB so aussehen:
For Zeile = a To 7 Step -1
If Cells(a, 1).Value Name Then Rows(a).Delete
Next a
Den Teil
LetztezeileA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
a = LetztezeileA
Kannst Du auch verkürzen auf
a = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Und wenn ich noch einen weitern Tip loswerden darf:
Es ist löblich, dass Du grundsätzlich Deine Variablen deklarierst; allerdings deklarierst Du erstens nicht alle, und zweitens ohne Datentyp.
Der komplette Deklarationsteil hiesse in Deinem Makro:
Dim LetztezeileA as Long
Dim a as Long
Dim Name as String
Dim Zelle as Range
Bei meiner Variante brauchst Du nur noch
Dim a as Long
Dim Name as String
Schönen Gruß,
Andi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige