2016-05-04 12 views
2

Ich versuche, jede Zeile zu löschen, in der der Zellenwert für Spalte x nicht mit dem Zellenwert von Spalte y übereinstimmt. Ich bekomme immer einen Objektfehler und bin mir ziemlich sicher, dass ich etwas Offensichtliches vermisse.VBA So löschen Sie Zeilen, wenn der Wert von Spalte X nicht mit dem Wert von Spalte Y übereinstimmt

Sub Gooddata() 

Application.ScreenUpdating = False 

lr = Range("C65536").End(xlUp).Row 
For a = lr To 1 Step -1 
If Cells(a, 8).Value <> Cells(a, 9).Value Then 
Cells(a, 3).Select 
ActiveCell.EntireRow.Delete = True 
End If 
Next a 

Application.ScreenUpdating = True 
End Sub 

Edit: Ich habe den Code vorgenommenen Änderungen auf der Grundlage der Vorschläge der Kommentare hier ist das Eingangsbild der Code und das Ausgangsbild.

enter image description here

Sub Gooddata() 

Application.ScreenUpdating = False 

lr = Range("C65536").End(xlUp).Row 
For a = lr To 1 Step -1 
If Cells(a, 8).Value <> Cells(a, 9).Value Then 
Cells(a, 3).EntireRow.Delete 
End If 
Next a 

Application.ScreenUpdating = True 
End Sub 

Wenn der Code in der Art und Weise ausgeführt, dass ich es zu Old Argus Gebäuden will 12 wird jedoch nicht gelöscht werden, die Zeile darunter wird es wegen des Kommas und Strichs.

enter image description here

+0

Es funktioniert, ich bin ein Idiot. Danke ... – Brayheart

+2

Auch ich empfehle nicht ['.Select'] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) .So , kuscheln Sie einfach Ihre Zeile mit der Endung '.Select' mit dem Teil nach der' Activecell' der nächsten Zeile. Also, 'Cells (a, 3) .EntireRow.Delete = True' ... was @Findwindow vorgeschlagen hat. Das ist wahrscheinlich der Grund, warum Sie den Fehler bekommen haben (nur wenn Sie sich gefragt haben). – BruceWayne

+0

Also falscher Alarm. Es funktioniert nicht wie vorgesehen. Als ich @findwindow's probierte löschte das Makro viel mehr als beabsichtigt Was mache ich falsch? Wenn ich den Code mit ** Zellen (a, 3) .EntireRow.Delete ** löschte das Makro alle Zellen neben 3, wo die 3, die links waren die Zellen nicht übereinstimmen .. I versuche Zeilen zu löschen, in denen Zelle A und Zelle B nicht übereinstimmen. Es scheint das Gegenteil zu tun. ** <> ** ist der ungleiche Operator in VBA nicht wahr? – Brayheart

Antwort

1

bereits. Dies könnte brechen, wenn zweite Spalte mehr Wörter als erste XD

Sub Gooddata() 

Dim lr As Long 
Dim arr As Variant 
Dim brr As Variant 

Application.ScreenUpdating = False 

With ActiveSheet 

lr = .Cells(.Rows.count, "G").End(xlUp).Row 

For A = lr To 1 Step -1 

    I = 0 
    arr = Split(Trim(.Cells(A, 7).Value2), " ") 
    brr = Split(Trim(.Cells(A, 8).Value2), " ") 

    For Each e In arr 

     '.Cells(A, 9) = e 
     If e <> brr(I) Then 
      .Cells(A, 3).EntireRow.Delete 
      Exit For 
      'GoTo yarr 
     End If 
     I = I + 1 

    Next e 

'yarr: 
'Erase arr 
'Erase brr 

Next A 

End With 

Application.ScreenUpdating = True 

End Sub 

Bevor hat:

enter image description here

Nach:

enter image description here

+0

@brayheart hat diese Arbeit? – findwindow

Verwandte Themen