2016-08-05 16 views
0

Ich versuche, eine For Next Loop bis zur letzten Zeile einer bestimmten Spalte (aber nicht die letzte Zeile des Blattes) auszuführen. Der erste Teil meiner Liste hat also Daten in Spalte F und der zweite Teil nicht. Ich möchte nur, dass das Makro auf diesen ersten Teil angewendet wird. Aus irgendeinem Grund läuft die Schleife nur mit bestimmten Befehlen durch den ersten Teil, aber nicht mit denen, die ich gerade versuche. (Ich weiß, es wäre einfach, die zwei Teile manuell zu trennen und dann zu laufen, aber es macht mich verrückt, nicht zu wissen, was ich falsch gemacht habe :)). DieseVBA Für die nächste Schleife bis zur letzten Zeile einer Spalte, aber nicht letzte Zeile des Blattes

ist der Code:

Dim i As Integer 
Dim g As Double 
g = 0.083333333 
Dim lastrow As Long 
lastrow = Sheets("zm").Range("f" & Rows.Count).End(xlUp).Row 

Sheets("zm").Activate 

For i = 2 To lastrow 

    If Sheets("zm").Cells(i, 1) = Sheets("zm").Cells(i + 1, 1) And Sheets("zm").Cells(i, 5) = Sheets("zm").Cells(i + 1, 5) And Sheets("zm").Cells(i + 1, 6) - Sheets("zm").Cells(i, 7) < g Then 
     Sheets("zm").Cells(i + 1, 7).Copy 
     Sheets("zm").Cells(i, 7).Select 
     ActiveSheet.Paste 
     Application.CutCopyMode = False 
     Sheets("zm").Rows(i + 1).Delete 
    End If 

Next i 

Vielen Dank für Ihre Hilfe!

+1

Ihr Code wird einige Prüfungen auf Zeile tun i und, wenn nötig, eine Zelle kopieren und Zeile löschen i + 1 . Diese Löschung bedeutet, dass Zeile i + 2 nun Zeile i + 1 wird, und Zeile i + 3 wird i + 2 ... und Zeile lastrow + 1 wird Zeile lastrow. Ihre Schleife fängt dann an, Sachen mit der neuen Reihe i + 1 zu tun (die zu i + 2 verwendete) und fährt fort, bis Sie zu lastrow (das möglicherweise begann, Reihen lastrow + 279 zu sein) gehen. Sie ** müssen * tun müssen "Für i = lastrow zu 2 Schritt -1", aber ich bin mir nicht sicher, ob das mit Ihrer If-Anweisung funktioniert. (Und dieser ganze Vorschlag mag völlig unabhängig von deinem Problem sein.) – YowE3K

+0

LOL - Ich habe gerade deine Benutzerkennung bemerkt - und ich habe gerade die Simpsons-Episode gesehen, in der Homer zu Duffman wird – YowE3K

+0

Ich würde ein paar Klammern hinzufügen, um sicherzustellen, dass dein 'If' ist gut klar, vor allem der dritte Teil –

Antwort

0

vermeiden Select/Selection und/oder Activate/ActiveXXX

versuchen Sie dies:

Option Explicit 

Sub main() 
    Dim i As Long, lastrow As Long 
    Dim g As Double 
    g = 0.083333333 

    With Worksheets("zm") 
     lastrow = .Cells(.Rows.Count, "F").End(xlUp).Row 

     For i = lastrow To 2 Step -1 
      If .Cells(i, 1) = .Cells(i + 1, 1) And .Cells(i, 5) = .Cells(i + 1, 5) And .Cells(i + 1, 6) - .Cells(i, 7) < g Then 
       .Cells(i + 1, 7).Copy Destination:=.Cells(i, 7) 
       .Rows(i + 1).Delete 
      End If 
     Next i 
    End With 
End Sub 
+0

@Duffman: hast du es durchstehen? – user3598756

+0

Ja, vielen Dank, Alter! – Duffman

+0

Also die "step -1" -Funktion subtrahiert eine Zeile aus der Schleife mit jedem Mal, wenn einer gelöscht wird, oder? – Duffman

Verwandte Themen