2016-05-31 11 views
1

Ich möchte ein Makro erstellen, das mit einer Whitelist übereinstimmt, und dann alles löschen, was nicht auf der Whitelist steht. Ich habe den folgenden Code:VBA Whitelist - Abgleich mit Whitelist, dann Löschen bestimmter Bereiche

Sub WHITELIST() 

Dim LR As Long, i As Long 
With Sheets("Sheet1") 
LR = .Range("A" & Rows.Count).End(xlUp).Row 
For i = LR To 1 Step -1 
If IsError(Application.Match(.Range("A" & i).Value, Sheets("Whitelist").Columns("A"), 0)) Then .Rows(i).Delete 
Next i 
End With 
End Sub 

Aber mein Code löscht die gesamte Zeile. Ich möchte nur den Bereich A: B löschen und die Zellen nach oben verschieben (die Zeilengröße ist variabel, so dass ich immer bis zur letzten Zeile prüfen möchte - bis zu 40.000 Zeilen). Es ist wichtig, dass "wichtige Daten" nicht gelöscht werden. Hier ist ein Beispiel, wie das Makro funktionieren sollte:

enter image description here

Hoffnung jemand kann mir helfen,

Grüße

Antwort

0

Versuchen Sie, diese Linie zu ändern

If IsError(Application.Match(.Range("A" & i).Value, Sheets("Whitelist").Columns("A"), 0)) _ 
Then .Rows(i).Delete 

dieser

If IsError(Application.Match(.Range("A" & i).Value, Sheets("Whitelist").Columns("A"), 0)) _ 
Then .Range("A" & i & ":B" & i).Delete Shift:=xlUp 
Diese 10

löscht nur die Zellen in columns A und B.

die Shift:=xlUp Verwendung ermöglicht es Ihnen, diese spezifischen Zellen im Bereich löschen Sie definieren und den gesamten Block von Zellen unterhalb dieses Bereichs nach oben verschieben.