ich will jede Zeile in einem Bereich löschen, wenn in einer Spalte
ein bestimmter Wert steht, zum Beispiel:
'Für jede Zelle mit "weg damit" in Spalte F wird Zeile gelöscht
For Each zelle In Range("F1:F25").Cells
If zelle.Formula = "weg damit" Then
zelle.Activate
Selection.EntireRow.Delete
'Selection.EntireRow.Hidden = True
End If
Next
Wenn ich .Hidden wähle funktioniert es, bei delete nicht. Da wird
jede 2. Zeile übersprungen.
Das Einfügen von
ActiveCell.Offset(-1, 0).Select
vor dem End If hat auch nicht geholfen.
Wie macht man's richtig?
Gruß
Jörg
--
LPs auf CD brennen - so geht's: http://www.joergei.de/
Bei Antworten per E-Mail bitte den Unterstrich aus der Adresse entfernen.
etwa so,
For zelle = 25 To 1 Step -1
If Cells(zelle, 6).Value = "weg damit" Then
Rows(zelle).Delete
End If
Next
mfg Herbert
als Ergänzung, wenn du Zeilen löschst
dann immer von der höchsten zur niedrigsten
sonst klappts nicht.
von unten nach oben z. B.
wenn in Zeile 1 bedingung erfüllt dann löschen
nun wird Zeile zwei zu Zeile eins
wenn in Zeile zwei auch bedingung erfüllt
dann bleibt die stehen denn sie ist ja durch
das löschen jetzt Zeile 1 und du suchst in Zeile zwei
mfg Herbert
Jörg Eisenträger schrieb am 17.05.2004
> ich will jede Zeile in einem Bereich löschen, wenn in einer Spalte
> ein bestimmter Wert steht, zum Beispiel:
[Code gesnippt], da Erklärung von Herbert schon erhalten
> Wie macht man's richtig?
'Richtig' sit so eine Sache, ich hätte anstelle der Prüfung jeder einzelnen
zelle noch eine Alternative zu bieten, die bei grossen Datenbeständen und
wenigen Fundstellen etwas schneller laufen dürfte: verwende die
.Find-Methode um die Einträge zu finden und zu löschen.
Der Coe könnte dann wie folt aussehen:
Public Sub Loeschen()
'Für jede Zelle mit "weg damit" in Spalte F wird Zeile gelöscht
Dim rngFind As Range
On Error Resume Next
Do
Set rngFind = Range("F1:F25").Find("weg damit", _
LookIn:=xlFormulas, lookat:=xlWhole)
If rngFind Is Nothing Then Exit Do
rngFind.EntireRow.Delete
Loop
End Sub
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
Auch nicht uninteressant. Ich habe jetzt mal schon Herberts Prinzip von
unten nach oben eingebaut. Bei maximal 1000 Zeilen und 10 - 30 % zu
löschen ist das völlig OK.
Ich danke Euch beiden.
Jörg Eisenträger schrieb am 18.05.2004
>>Alternative zu bieten, die bei grossen Datenbeständen und
>>wenigen Fundstellen etwas schneller laufen dürfte: verwende die
>>.Find-Methode
>
> Auch nicht uninteressant. Ich habe jetzt mal schon Herberts Prinzip von
> unten nach oben eingebaut. Bei maximal 1000 Zeilen und 10 - 30 % zu
> löschen ist das völlig OK.
Es führen bekanntlich viele Wege nach Rom und gerade in VBA sinds dann noch
ein paar mehr.
> Ich danke Euch beiden.
Aber gerne doch; es freut mich, wenn wir helfen konnten - Danke auch für
das Feedback.
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-1 / xl2000 SP-3]