Wie indirekt markierte Zeilen mit Makro löschen?

liebe Experten,
in einer Excel Tabelle möchte ich
die Zeilen 200 bis 299 löschen ,
wenn
in korrespondierenden Zellen A100 - A199 steht kein X

Wie nutze ich z.B. =WENN(A100=„X“;A100;"")
und wie lösche ich alle Zeilen außer die indirekt mit X markierten mittels Makro?

Im Internet finde ich Makros, die das Löschen einer Zeile bewirken,
wenn dessen erste Zelle A leer ist,

aber ich möchte z.B.
Zeile A255 löschen, wenn in Zelle A155 etwas anderes als X steht ,
d.h. es soll dazu abgefragt werden, ob der Zelleninhalt A155 = X, ja oder nein, ist.

Damit das ganze nicht auch auf Zeilen zwischen A100 - A199 wirkt, müßte der fragliche Bereich A200 - A299, auf den das Makro wirken soll, angeben werden.

Danke für jegliche Hilfe

Zeile A255 löschen, wenn in Zelle A155 etwas
anderes als X steht
,
d.h. es soll dazu abgefragt werden, ob der Zelleninhalt A155 =
X, ja oder nein, ist.

Hallo Schwipp,

ungetestet:

Sub Loesch()
Dim Zei As Long, arrL(99) As Long
For Zei = 100 To 199
 If Cells(Zei, 1) "X" Then arrL(100 - Zei) = Zei + 100
Next Zei
For Zei = 99 To 0 Step -1
 If arrL(Zei) \> 0 Then Rows(arrL(Zei)).Delete
Next Zei
End Sub

Gruß
Reinhard

Herzlichen Dank!
Da mir das Makro irgendwie in Spalte B die erste (!) Zelle löscht,
habe ich rumprobiert und mal diesen Code für Dummies daraus gemacht,
aber in Spalte B wird nach wie vor die Zelle (2,1) gelöscht


Sub loesch()
Dim Zei As Long, loesch(1000) As Long

’sicher sein dass alle Werte von loesch( ) null sind:
For Zei = 1 To 1000
loesch(Zei) = 0
Next Zei

’diejenigen Werte von loesch() auf 1 setzen, wenn später die Zeile loesch( ) gelöscht werden soll:
For Zei = 200 To 300
If Cells(Zei - 100, 1) „x“ Then loesch(Zei) = 1
Next Zei

’zum rumprobieren mal nur auf Zeilen 210 - 213 anwenden
For Zei = 213 To 210 Step -1
If loesch(Zei) > 0 Then Rows(loesch(Zei)).Delete
Next Zei

End Sub

Wie rufe ich den Einzelschritt-Debugger auf, so dass ich auch sehe, wohin das Programm in der Excel-Tabelle gerade gesprungen ist?

also Zelle (1,2) wird nicht so richtig gelöscht, sondern es kommt ### als Antwort, undefinierter Bezug.

Hallo Schwipp,

also Zelle (1,2) wird nicht so richtig gelöscht,

? es ging um zeilen löschen und die werden gelöscht.

sondern es
kommt ### als Antwort, undefinierter Bezug.

Aber nicht mehr in der Ex-Zeile 1, die ist weg. Also in einer anderen zelle die sich auf Zelle B1 bezog.

Natürlich zertrümmert ein Makro mit Zeilenlöschung irgendwelche Formelstrukturen.

Gruß
Reinhard

Hallo Schwipp,

Da mir das Makro irgendwie in Spalte B die erste (!) Zelle
löscht,

ich schreib nicht ohne Grund, ungetestet. Aber das was du sagst kann nicht sein, entweder, wenn ein Fehler drin ist macht das makro nix, oder aber es löscht eine ganze Zeile, also keine Einzelzelle.

Das gibt eindeutig die Anweisung If irgendwas Then Rows(x).delete vor.

habe ich rumprobiert und mal diesen Code für Dummies daraus
gemacht,
aber in Spalte B wird nach wie vor die Zelle (2,1)
gelöscht

Zelle(2,1) ist A2 und die ist nicht in Sppalte B.

'sicher sein dass alle Werte von loesch( ) null sind:
For Zei = 1 To 1000
loesch(Zei) = 0
Next Zei

Gut gedacht, brauchste aber nicht.

'diejenigen Werte von loesch() auf 1 setzen, wenn später die
Zeile loesch( ) gelöscht werden soll:
For Zei = 200 To 300
If Cells(Zei - 100, 1) „x“ Then loesch(Zei) = 1
Next Zei

„x“ oder „X“?

Wie rufe ich den Einzelschritt-Debugger auf, so dass ich
auch sehe, wohin das Programm in der Excel-Tabelle gerade
gesprungen ist?

Blende dir gleichzeitig die Fenster der tabelle und des VB-Editors ein, dann stelle den Curserin den Code und drüücke F8…

Gruß
Reinhard

Danke Reinhardt, nun funktioniert es,
Abfrage von Zellen A1 - A19,
wenn da ein x drin steht, werden Zeilen aus dem Bereich Zeile 39 - 21
gelöscht.
Wichtig ist der genaue Versatz der Zeilen (hier unten 20),
sonst klappt es natürlich nicht, das war mein Fehler, Holper-Code nun:

Sub loesch()
Dim Zei As Long
Zei = 39
loop:
If Cells(Zei - 20, 1) „x“ Then Rows(Zei).Delete
Zei = Zei - 1
If Zei > 20 Then GoTo loop

End Sub

Oder (unausprobiert)

Dim Zei As Long
for Zei = 39 to 21 step -1
If Cells(Zei - 20, 1) „x“ Then Rows(Zei).Delete
next Zei
End Sub

die Zellen-Markierung war ein kleines x