2017-06-21 1 views
0

Ich habe Probleme mit dem folgenden: Ich möchte Zeilen löschen, für die das Datum (Spalte C) älter ist als heute. Mein Code funktionieren soll (nach dem Netz) aber es funktioniert nicht, und darüber hinaus, es ist super langsam .. Hier ist ein Teil davon:Entfernen von Zeilen, wenn das Datum vor heute ist -

For i = 2 To LastRow  
    If Cells(i, "C").Value < Date Then Rows(i).EntireRow.Delete  
Next i 

Statt setzen „C“, I 3 setzen konnte, aber ändert nichts. Ich habe versucht, das Ende If (vor dem nächsten i) hinzuzufügen, aber anscheinend nicht notwendig. Vielleicht ist das Datum nicht das richtige Format ..

Was ist falsch an diesem Code?

Großer Dank für Ihre Hilfe :)

+0

was macht es, dass es nicht sollte? 'Not Working' ist nicht beschreibend genug. Versuchen Sie auch, rückwärts zu loopen: 'Für i = LastRow bis 2 Step -1' –

+0

Nicht funktionierend bedeutet, dass die Zeilen mit dem Datum vor dem heutigen Tag nicht gelöscht wurden. – Jeofbist3

Antwort

0

Sie wollen zurück Schritt beim Löschen von Zeilen und stellen Sie sicher, dass es tatsächlich ein Datum in der Zelle ist. Um zu sehen, was es macht, setze einen Haltepunkt in der ersten Zeile und benutze F8, um ihn zu durchlaufen. Stellen Sie außerdem sicher, dass der Wert von LastRow auf den richtigen Wert gesetzt wird.

For i = LastRow To 2 Step -1 
    If IsDate(Cells(i, "C").Value) then 
     If Cells(i, "C").Value < Date Then Rows(i).EntireRow.Delete 
    End If 
Next i 
+0

Sie möchten vielleicht auch die Zelle in einen tatsächlichen Datumswert konvertieren ... 'CVDate (Zellen (i," C "). Wert) braX

+0

Danke für Ihre Antwort braX. Ich habe gerade deinen Code eingegeben und es funktioniert. Aber es ist extrem langsam beim Rechnen (Ich habe 11 000 Zeilen, vielleicht warum, aber seltsam, weil schneller für größere Dateien, aber für andere Formeln (nicht, wenn)). Ich habe den Konvertierungscode nicht eingegeben, da das Format das Datum ist (Rechtsklick auf Excel). Wird die Umwandlung es schneller machen? Ich habe nicht verstanden, wo ich einen Haltepunkt setzen soll: in der Datei oder im Code? Danke :) – Jeofbist3

+0

Sie können Bildschirmaktualisierungen während der Verarbeitung deaktivieren. 'Application.ScreenUpdating = False' und dann wieder an, wenn Sie fertig sind. – braX

1

Verwenden Sie die automatischen Filterfunktionen von Excel zu Ihren Gunsten. Filtern Sie den Bereich anhand Ihrer Kriterien, um die übereinstimmenden Zeilen zu löschen:

With Range("C1:C" & lastrow) 
    .AutoFilter 1, "<" & CLng(Date) 
    .Offset(1).EntireRow.Delete 
    .AutoFilter 
    End With 
+0

Danke für Ihre Antwort! Funktioniert wirklich großartig und schnell :) – Jeofbist3

Verwandte Themen