2016-05-18 10 views
0

Sobald ich eine Bereichsvariable in VBA gesetzt habe, gibt es eine Möglichkeit, Zeilen und/oder Spaltenzellen basierend auf einem Wert zu löschen?Wie kann ich Zeilen aus einem Set-Range-Objekt löschen

Zum Beispiel:

Dim Lrange as Range 

Set Lrange = Range("A1:E5") 

For each row in Lrange 
    If cell(Lrange.row, 3).value = "Somestring" Then 
     LRange.row.delete 
    End if 
Next 

Ist das möglich oder würde ich es zu speichern, in Arbeitsblatt den Bereich zu manipulieren?

Alle Vorschläge sind willkommen!

Antwort

0

Wenn Sie die Zeilen in dem Arbeitsblatt löschen möchten, basierend auf einem Wert, dann Code wie die folgenden werden das tun ...

Sub DeleteRows() 
Dim aRange As Range, aRow As Range, aCell As Range 
    Set aRange = Range("A1:E5") 
    For Each aRow In aRange.Rows 
     For Each aCell In aRow.Cells 
      If aCell.Value = "Somestring" Then 
       aRow.EntireRow.Delete 
       Exit For 
      End If 
     Next aCell 
    Next aRow 
End Sub 

Wenn Sie den Bereich ändern möchten, dass ein Objekt in VBA Referenzierung, basierend auf einem Wert, dann Code wie die folgenden wird das tun ...

Sub DeleteRowsInObject() 
Dim aRange As Range, aRow As Range, aCell As Range 
Dim bRange As Range, found As Boolean 
    Set aRange = Range("A1:E5") 
    For Each aRow In aRange.Rows 
     found = False 
     For Each aCell In aRow.Cells 
      If aCell.Value = "Somestring" Then found = True 
     Next aCell 
     If Not found Then 
      If bRange Is Nothing Then 
       Set bRange = aRow 
      Else 
       Set bRange = Union(bRange, aRow) 
      End If 
     End If 
    Next aRow 
    Set aRange = bRange 
    Set bRange = Nothing 
End Sub 

Sie müssen sich mit einem Range-Objekt, vorsichtig sein, die nicht kontinuierlich ist mit seinen Zeilen/Spalten, wie einig Die normalen Eigenschaften/Methoden liefern nicht unbedingt die Werte, die Sie erwarten würden.

+0

Würde der Bereich in mehrere nicht kontinuierliche Abschnitte unterteilt? Gibt es eine Möglichkeit, die Zellen nach oben zu schieben, wie auf einem Spredsheet? –

+0

@Srick - fügen Sie 'debug.print aRange.address' am Ende der Routine hinzu und Sie werden sehen, wie aRange" geteilt "wird. Je nachdem, was Sie erreichen möchten, ist es wahrscheinlich besser, ein Array vom Typ Variant zu verwenden. – OldUgly

+0

Ok, also die Bereichswerte durchlaufen und in einem Array speichern. Ich versuche, einen Bereich von mehreren Arbeitsmappen zu einem Master-Arbeitsmappe zu verschieben, aber ich finde bestimmte Benutzereingabe auf den Quellbüchern macht die Prozedur fehlerhaft, ich möchte Dinge wie Leerzeichen und andere Qualifikationsmerkmale entfernen, die normalerweise auf dem Quellbuch gefiltert werden würden. Danke für Ihre Hilfe ! –

0

Wenn Sie löschen wollen, können Sie Schleife rückwärts durch die Reihen sollten:

Dim Lrange    As Range 
Dim n      As Long 
Set Lrange = Range("A1:E5") 

For n = Lrange.Rows.Count To 1 Step -1 
    If Lrange.Cells(n, 3).Value = "Somestring" Then 
     Lrange.Rows(n).Delete 
    End If 
Next 

zum Beispiel.

Verwandte Themen