2016-11-10 2 views
0

Ich schreibe einen Code, um die Spalten loszuwerden, die eine bestimmte Zeichenfolge in einer Zelle enthalten. Der Code lautet wie folgt:VBA-Code zum Löschen von Spalten, die eine bestimmte Zeichenfolge mit der Funktion Zellen enthalten

Dim i As Integer 
Dim j As Integer 
Dim state As String 
Dim num As Variant 
num = InputBox("Enter the state", "What stx is it?", "Enter x here") 
'the & will combine them together 
state = "st" & num 
With ActiveSheet.UsedRange 
'Uses all the columns in use due to the previous line 
For j = 2 To .Columns.Count 
    If .Cells(2, j).Formula = state Then 
    'Do nothing 
    Else 
    Range(.Cells(1, j), .Cells(.Rows.Count, j)).Delete Shift:=xlToLeft 
    End If 
Next j 
End With 
End Sub 

ich bei j=2 gestartet werden, weil ich die erste Spalte löschen nicht wollen. Here is a snippet of my data I am trying to modify. Dies löscht jedoch nicht alle Spalten, die die spezifische Zelle enthalten. Was mir ein Rätsel ist, dass wenn ich

Range(.Cells(1, j), .Cells(.Rows.Count, j)).Delete Shift:=xlToLeft 

mit

Range(.Cells(1, j), .Cells(.Rows.Count, j)).Interior.ColorIndex = 6 

ersetzen sie alle Zellen richtig hervorhebt, die ich löschen möchten.

+0

wenn Zeilen oder Spalten immer Schleife rückwärts zu löschen, 'Für j = .Columns.Count zu Schritt 2 -1' –

+0

Vielen Dank für Ihre Antwort. – Koskarium

Antwort

1

Wenn Sie Zeilen mit einer Schleife löschen, sollten Sie immer rückwärts laufen, da beim Löschen einer Zeile j um 1 erhöht wird und Sie eine Zeile überspringen.

ersetzen

For j = 2 To .Columns.Count 

Für

For j = .Columns.Count To 2 Step -1 
+0

Nur um klar zu sein, "Schritt -1" wird mich eine Zelle zurückstellen, und in diesem Fall vom Ende? – Koskarium

+0

Ja, das wird in der allerletzten Zeile beginnen und rückwärts durch Ihre Daten arbeiten. Dies stellt sicher, dass keine Zeilen übersprungen werden. Wenn Sie vorwärts laufen, sagen wir j = 5 und es löscht diese Zeile, das bedeutet, Zeile 6 ist jetzt Zeile 5, aber j ist jetzt gleich 6, so dass die ursprüngliche Zeile 6 alle zusammen verfehlt wurde. –

+0

Oh deshalb; das macht Sinn. Danke für deine Zeit und Weisheit. – Koskarium

Verwandte Themen