Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[VBA] Löschen von Zeilen in Range, wenn Bedingung erfüllt

1,079 views
Skip to first unread message

Jörg Eisenträger

unread,
May 17, 2004, 5:01:06 PM5/17/04
to

Hallo,

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.

Herbert Taferner

unread,
May 17, 2004, 5:27:08 PM5/17/04
to
Hallo Jörg,

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


Herbert Taferner

unread,
May 17, 2004, 5:37:31 PM5/17/04
to
Hallo Jörg,

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


Thomas Ramel

unread,
May 18, 2004, 12:53:22 AM5/18/04
to
Grüezi Jörg

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]

Jörg Eisenträger

unread,
May 18, 2004, 2:19:55 PM5/18/04
to
>> 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
>
>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.

Ich danke Euch beiden.

Thomas Ramel

unread,
May 19, 2004, 1:15:47 AM5/19/04
to
Grüezi Jörg

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]

0 new messages