Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1100to1104
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

bestimmte Zeilen löschen

bestimmte Zeilen löschen
Frank
Hallo zusammen,
ich habe zwar schon einige Beiträge gelesen aber leider noch nichts gefunden was mir bei meinen Problem hilft.
Zum Problem / Aufgabe:
In einer Excel Tabelle sollen in der Spalte D die Zellen mit einem Wert grösser als 9999 identifiziert werden. Ist eine Zelle in der Spalte D mit dem Wert grösser als 9999 identifiziert worden soll die komplette Zeile gelöscht werden. Die Tabelle hat eine Variable Länge und von der Suche sollte die erste Zeile ausgenommen sein.
Diese Funktion sollte mit einer For Each ; oder For Next Schleife möglich sein, jedoch habe ich offenbar die Funktion noch nicht richtig durchschaut. Es Wäre nett wenn mir da jemand einen Beispielcode erstellen könnte.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: bestimmte Zeilen löschen
09.09.2009 10:14:40
Adelhorst
Hallo Frank
Option Explicit
Private Sub ZeileLoeschen()
Dim rw As Long
For rw = Range("D65536").End(xlUp).row To 2 Step -1
If Cells(rw, "D") > 9999 Then Rows(rw).Delete
Next rw
End Sub

Gruß Adelhorst
AW: bestimmte Zeilen löschen
09.09.2009 10:29:01
Frank
Danke Adelhorst,
der schlanke Code hat schon geholfen.
Wenn es dir nicht zuviel umstände macht könntest du mir die FOR NEXT Syntax aus dem Code erklären? möche ja nicht nur stumpf kopieren sondern auch was lernen ;-)
Insbesondere ist mir der Syntax mit dem .End(xlup) to 2 Step -1 nicht klar
Danke
AW: bestimmte Zeilen löschen
09.09.2009 11:18:27
Adelhorst
Hallo Frank.
Private Sub ZeileLoeschen()
Dim rw As Long
Application.ScreenUpdating = False
For rw = Range("D65536").End(xlUp).row To 2 Step -1
If Cells(rw, "D") > 9999 Then Rows(rw).Delete
Next rw
Application.ScreenUpdating = True
End Sub
".End(xlUp)"- sucht von Zelle "D65536" an aufwärts (xlUp) nach der ersten belegte Zelle in der Spalte.
".Row" - gibt vom Suchergebnis die Zeilennummer zurück. Somit wird rw mit der Zeilennummer der letzten beschriebenen Zelle der Spalte D initialisiert.
"Step - 1" - Die For-Schleife läuft nicht wie gewöhnlich aufwärts (z.B. von 1 bis 100, entspricht "Step 1"), sondern soll rückwärts laufen (z.B. von 30 bis 1, daher "Step -1")
"to 2" - Zeile 1 sollte ja nicht mit berücksichtigt werden, daher nur bis Zeile 2 "hochlaufen".
"Application.ScreenUpdating" - Schaltet die Bildschirmaktualisierung Ein/Aus. Sind mehrere Zeilen zu löschen, verhindert dies ein Bildschirmflackern und beschleunigt das Macro.
Zeilen löscht man am besten rückwärts, d.h. von unten nach oben.
Würde man nämlich von oben nach unten löschen, gäbe es ein grosses Problem:
Wenn die For-Schleife z.B. in Zeile10 wäre und Zeile 10 in der For-Schleife gelöscht werden würde, dann würde nach dem Löschen von Zeile 10, Zeile 11 (und natürlich auch alle Folgezeilen) um eine Zeile "nachrücken". In der nächsten For-Schleife würde "rw" auf Zeile 11 zeigen und damit würde der veränderte, neue Inhalt von Zeile 10 unberücksichtigt bleiben.
Arbeitet man die Zeilen aber rückwärts ab, ist das Nachrücken der Folgezeilen berücksichtigt.
Gruß Adelhorst
PS: die ".End (xlUp)" - Funktion berücksichtigt NUR eingeblendete Zeilen.
Anzeige
AW: bestimmte Zeilen löschen
09.09.2009 10:18:49
Tino
Hallo,
versuche es mal hiermit,
Tabellenname, Spalte (D=4) und den Wert angeben.
Option Explicit
Sub LoescheDoppelte()
Dim iCalc As Integer
Dim LSpalte As Long, strAbZahl As String
Dim meSH As Worksheet

'Tabellenname anpassen 
Set meSH = Sheets("Tabelle1")
'Spaltennummer angeben 
LSpalte = 4
'Loesche größer als (als String angeben) 
'Bei Dezimalzahlen ein Punkt als Komma angeben Bsp.: "9999.99"! 
strAbZahl = "9999"


With Application
  iCalc = .Calculation
 .Calculation = xlCalculationManual
 .ScreenUpdating = False
    
    With meSH.UsedRange
        With .Columns(.Columns.Count).Offset(0, 1)
         
         .Formula = "=IF(AND(RC" & LSpalte & ">" & strAbZahl & ",ISNUMBER(RC" & LSpalte & ")),TRUE,ROW())"
        
          meSH.UsedRange.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
          
          On Error Resume Next
         .SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
          On Error GoTo 0
          
         .EntireColumn.Delete
        End With
    End With
 
 .ScreenUpdating = True
 .Calculation = iCalc
End With
End Sub
Gruß Tino
Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige