Im folgenden Code versuche ich 2 Datumswerte zu überprüfen. Wenn sie existieren, berechnen Sie die Tage zwischen in Spalte BG. Wenn sie nicht vorhanden sind oder das Ergebnis kleiner als 0 ist, löschen Sie die Zeile.VBA For-Schleife Iterationsproblem
Das Problem, das ich habe ist, dass, sobald es löscht, eine Zeile, es verwendet Next I, und überspringt die Zeile direkt danach. Bsp .: Zeile 1 & 2 fehlt ein Datum. Zeile 1 wird gelöscht. Zeile 2 wird in Zeile 1 geschoben, dann folgt ich, also sind wir jetzt in Zeile 2 (was 3 war) und überspringt die Ergebnisse von Zeile 2. Die Verwendung von i = i-1 scheint mein Programm zum Absturz zu bringen. Gibt es noch einen weiteren Weg, um meinen Code effizienter zu machen, so dass er schneller durch mehrere Elemente iterieren kann?
Sub Func4()
Dim N As Long, i As Long, j As Long, cnt As Long, date1 As Date, date2 As Date, date3 As Long ', iold As Long
N = Cells(Rows.Count, "A").End(xlUp).Row
j = 2
cnt = 0
For i = 2 To N 'main
j = j + 1
'iold = i
If Not IsEmpty(Cells(i, "AB").Value) And Not IsEmpty(Cells(i, "AE").Value) Then
date1 = Cells(i, "AB").Value 'AB=Entry Date
date2 = Cells(i, "AE").Value 'AE=Rec'd
date3 = Work_Days(date2, date1)
cnt = cnt + 1
If date3 >= 0 Then
Cells(i, "BG").Value = date3
Else
Rows(i).EntireRow.Delete
'i = i - 1 'HERE
End If
Else
Rows(i).EntireRow.Delete
'i = i - 1 'HERE
End If
'End If
'If i = iold Then
Next i
'Else
'Next
'End If
End Sub
RESOLVED ARBEITS ANTWORT:
Sub Func4()
Dim N As Long, i As Long, j As Long, cnt As Long, date1 As Date, date2 As Date, date3 As Long
N = Cells(Rows.Count, "A").End(xlUp).Row
j = 2
For i = N To 2 Step -1
j = j + 1
If Not IsEmpty(Cells(i, "AB").Value) And Not IsEmpty(Cells(i, "AE").Value) Then
date1 = Cells(i, "AB").Value 'AB=Entry Date
date2 = Cells(i, "AE").Value 'AE=Rec'd
date3 = Work_Days(date2, date1)
cnt = cnt + 1
If date3 >= 0 Then
Cells(i, "BG").Value = date3
Else
Rows(i).EntireRow.Delete
End If
Else
Rows(i).EntireRow.Delete
End If
Next i
End Sub
Sie Schleife müssen nach hinten, wenn Sie Löschen von Zeilen. – Comintern
Wie Komintern sagte 'Für i = N zu 2 Schritt -1' –
Danke für den Tipp! Ich habe nie darüber nachgedacht. Ich habe es anscheinend perfekt funktionieren lassen! Bitte reichen Sie Ihre einfache Antwort als Antwort ein und ich werde Ihnen Punkte belohnen! – Josh