For each next

Bild

Betrifft: For each next
von: Benjamin
Geschrieben am: 10.12.2003 11:03:38

Hallo zusammen,

habe folgenden code zusammengebastelt.
Funktioniert aber leider nur zur Hälfte.
Ich muss ihn immer mehrmals ausführen damit das Ergebnis stimmt.
Hat jemand ne Idee wo mein Fehler ist?

Vielen Dank im Vorraus.

LG Ben


Sub Anpassen()
        Dim Ende As Integer
            ActiveSheet.Range("d65536").End(xlUp).Select
        Ende = ActiveCell.Row
        Dim r As Range
        Set r = Range("D21", Range("D" & Ende))
        Dim Zeile As Integer
        
        For Each c In r
            c.Activate
            Zeile = ActiveCell.Row
            Zelle = ActiveCell.Address
        
            If Left(c, 5) <> "Daily" _
                And Cells(Zeile, "A").Value = "" _
                Or Cells(Zeile, "A").Value = "0" Then
            c.EntireRow.Delete
            End If
        Next
     
End Sub

Bild


Betrifft: AW: For each next
von: Matthias G
Geschrieben am: 10.12.2003 11:21:15

Hallo Benjamin,
das Problem ist, dass Du in der Schleife Zeilen löschst.
Wenn Du das tust, musst du von unten nach oben arbeiten:

Sub Anpassen()
        Dim Ende As Integer
            ActiveSheet.Range("d65536").End(xlUp).Select
        Ende = ActiveCell.Row
        Dim r As Range
        Set r = Range("D21", Range("D" & Ende))
        Dim Zeile As Integer
        
        For z = Ende To 21 Step -1
            Cells(z, 4).Activate
            Set c = ActiveCell
            Zeile = z
            Zelle = ActiveCell.Address
        
            If Left(c, 5) <> "Daily" _
                And Cells(Zeile, "A").Value = "" _
                Or Cells(Zeile, "A").Value = "0" Then
            c.EntireRow.Delete
            End If
        Next
     
End Sub

Der Code ist ein wenig umständlich mit dem Activate und Select, aber das mach ich auf die Schnelle jetzt nicht anders.
Viel Erfolg,
Matthias


Bild


Betrifft: AW: For each next
von: Benjamin
Geschrieben am: 10.12.2003 12:50:05

Danke,

funktioniert super.
Da Du der erste warst, habe ich Deinen Vorschlag umgesetzt.
LG ben


Bild


Betrifft: AW: For each next
von: Benjamin
Geschrieben am: 10.12.2003 13:03:43

Danke,

funktioniert super.
Da Du der erste warst, habe ich Deinen Vorschlag umgesetzt.
LG ben


Bild


Betrifft: AW: For each next
von: WernerB.
Geschrieben am: 10.12.2003 11:24:30

Hallo Benjamin,

zum Löschen von Zeilen sollte man sich immer von unten nach oben durcharbeiten, sonst werden dabei u.U. einzelne Zeilen übersprungen (daher "mehrmals ausführen").
Dies geht aber nicht mit einer For-Each-Schleife, sondern mit einer For-Next-Schleife (Step -1).

Sub Anpassen()
Dim i As Long, laR As Long
    Application.ScreenUpdating = False
    laR = Cells(Rows.Count, 4).End(xlUp).Row
    For i = laR To 21 Step -1
      If Left(Cells(i, 4), 5) <> "Daily" Then
        If Cells(i, 1).Value = "" Or Cells(i, 1).Value = "0" Then
          Cells(i, 1).EntireRow.Delete
        End If
      End If
    Next i
    Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Das Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter (siehe Forums-FAQ).


Bild


Betrifft: AW: For each next
von: Benjamin
Geschrieben am: 10.12.2003 12:47:10

Danke,
funktioniert!
LG Ben


Bild


Betrifft: löschen immer von unten ;-)
von: IngoG
Geschrieben am: 10.12.2003 11:39:15

Hallo Ben,

beim Löschen ganzer Zeilen gibt es immer probleme, wenn man von oben nach unten arbeitet, da excel intern immer mit zeilennummern indiziert und du nach dem löschen die Zeilennummer erhöst, was aber bedeutet, dass du die nächste Zeile überspringst...

vielleicht versuchst Du es mal so:


Sub Anpassen()
' integer kann nur bis 32000
    Dim zz As Double
    Application.ScreenUpdating = False
    For zz = ActiveSheet.Range("d65536").End(xlUp).Row To 21 Step -1
        If Left(ActiveSheet.Range("D" & zz), 5) <> "Daily" _
            And (Cells(zz, 1).Value = "" _
            Or Cells(zz, 1).Value = "0") Then
                 ActiveSheet.Range("D" & zz).EntireRow.Delete
        End If
    Next
    Application.ScreenUpdating = True
End Sub


bei mir funzt das

Gruß Ingo

PS eine Rückmeldung wäre nett...


Bild


Betrifft: AW: löschen immer von unten ;-)
von: Benjamin
Geschrieben am: 10.12.2003 12:45:55

Danke,
funktioniert!


Bild

Beiträge aus den Excel-Beispielen zum Thema " Formatieren"