2017-10-06 3 views
0

Möchten Zeilen aus einem Bericht basierend auf den Daten in Spalte M löschen. Der Bericht hat eine variable Größe in Reihen, aber die gleiche Breite in Spalten. "Gültig" in einer Zelle bedeutet, dass es gelöscht wird.VBA Excel Zeile löschen basierend auf Wert in Spalte

Sub Create() 
Dim Range1 As Range 
Set Range1 = Range("M:M") 
For Each cell In Range1 
    If ActiveCell.Value = "Valid" _ 
    Then ActiveCell.EntireRow.Delete 
Next cell 
End Sub 
+2

Sie nicht mit der aktiven Zelle arbeiten. Sie verwenden nicht Ihre 'Zelle' Iterator-Variable, fangen Sie damit an. –

+0

Außerdem schlage ich ** ** sehr vor, nicht alle Zeilen in einer Spalte zu durchlaufen. Minimiere auch diesen Bereich, was dir helfen wird. – BruceWayne

Antwort

1

Es jetzt über die ActiveCell aber Zellen in der Spalte "M: M". Außerdem müssen Sie von unten nach oben beginnen (nicht offensichtlich, aber wahr). Also, vorausgesetzt, es gibt weniger Zeilen als 10000, Sie so etwas wie diesen benötigt:

Sub Create() 
    Dim LastRow As Long 
    Dim i As Long 

    LastRow = Range("M10000").End(xlUp).Row 
    For i = LastRow To 1 Step -1 
     If Range("M" & i) = "Valid" Then 
      Range("M" & i).EntireRow.Delete 
     End If 
    Next 
End Sub 
0

finde ich eine Art und Weise mit Ihrem For Each:

Public Sub Create() 
Dim Range1 As Range 
Dim Cell 
Dim LastRow As Long 

    Set Range1 = Range("M1") 
    ' assume, there is some data in the first row of your sheet 
    LastRow = Range1.CurrentRegion.Rows.Count 
    ' otherwise, find last cell in column M with a value, assume before row 10000 
    LastRow = Range("M10000").End(xlUp).Row 

    ' select the cells to process 
    Set Range1 = Range(Range1, Range1.Offset(LastRow, 0)) 

    ' process the rows 
    For Each Cell In Range1 
     If Cell.Value = "Valid" Then 
      Debug.Print "' delete row from at address :: " & Cell.Address 
      Range(Cell.Address).EntireRow.Delete 
     End If 
    Next 
End Sub 
Verwandte Themen