Zeile löschen wenn...

26/10/2009 - 17:24 von Harri Märki | Report spam
Hallo zusammen

Ich bin an einem Makro dran, das folgende Funktion haben soll:

Wenn in der Spalte I ein Wert <= 0 ist, soll die ganze Zeile gelöscht
werden. Mein Makro sieht bisher so aus. Aber es passt noch nicht ganz. Bin
kein Profi im Makro. Habe versucht mit einem àhnlichen Fall zu kombinieren.

b = Range("I:I")
For i = 1 To 65536
b(i, 1) = IIf(b(i, 1) <= 0, Rows("b").Select.Delete Shift:=xlUp)
Next
Range("I:I") = b

Er markiert nun "Shift" und meint:

Fehler beim Kompilieren
Erwartet: Listentrennzeichen oder)

Wie genau müsste es aussehen? Für Lösungen bin ich dankbar.

Gruss Harri
 

Lesen sie die antworten

#1 Alexander Wolff
26/10/2009 - 17:36 | Warnen spam
Als <news: ließ
Harri Màrki verlautbaren, evtl. nachfolgend zitiert:

Hallo zusammen

Ich bin an einem Makro dran, das folgende Funktion haben soll:

Wenn in der Spalte I ein Wert <= 0 ist, soll die ganze Zeile gelöscht
werden. Mein Makro sieht bisher so aus. Aber es passt noch nicht
ganz. Bin kein Profi im Makro. Habe versucht mit einem àhnlichen Fall
zu kombinieren.

b = Range("I:I")
For i = 1 To 65536
b(i, 1) = IIf(b(i, 1) <= 0, Rows("b").Select.Delete Shift:=xlUp)



Ups, Harri. IIF ist eine Funktion, keine prozedurale
Verzweigungsmöglichkeit. Die gibt nur Werte zurück; man kann damit aber
nicht eigenstàndig AGIEREN.

Also müsste es heißen:

If b(i, 1) <= 0 Then Rows(i).Delete

Wenn Du i = 65536 to 1 Step -1 verwendest, gehts schneller.

Besser jedoch wàre, eine Tabellenfunktion in einer leeren benachbarten (ohne
Lücke!) Spalte X2: =I2>0 daneben zu setzen, X1 nach WAHR zu filtern und das
Filtrat zu kopieren. Der Zeitgewinn betràgt 3 Größenordnungen!
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2

Ähnliche fragen