Zeilen löschen, wenn in Zelle bestimmter Text

Hallo zusammen,

ich bins nochmal und brauche auch mal wieder Hilfe zu Makros.

Folgendes Problem:
Ich möchte, dass ein Makro die Zellen nach einem bestimmten Wort durchsucht. Wenn das Wort gefunden wurde, soll

  1. die Zeile gelöscht werden in der das Wort vorkommt,
  2. ebenfalls 3 Zeilen darüber gelöscht werden
  3. eine Anzahl x Zeilen darunter gelöscht werden

Beispiel: Das Wort Test steht in Zelle B7 nun sollen also die Zeilen B4 bis z.B. B18 gelöscht werden.

Einen kleinen Ansatz habe ich bereits. Das Makro löscht mir allerdings nur die Zeile in der das Wort vorkommt und die Anzahl X darunter. Das noch die darüber gelöscht werden bekomme ich nicht hin.

Sub delete()
Worksheets(„Tabelle“).Select
Range(„A1:K999“).Select
For Each Cell In Selection
If Cell.Value = „Test“ Then Cell.Select
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(100, 100)).Select
Next
Selection.delete
End Sub

Vielleicht könnt Ihr mir (mal wieder) weiterhelfen.
Bedanke mich im Voraus und wünsche einen angenehmen Tag.

Liebe Grüße

Hallo,

sub suche
dim x, y, z as byte

z=5 'ist die Variable für die darunter zu löschenden Zeilen

for x = 1 to 100
for y = 1 to 100
if activesheet.cells(x,y).value=„test“ then
activesheet.rows(x).clear
if x > 3 then
activesheet.rows(x-3).clear
end if
for z = 1 to z
activesheet.rows(x+z).clear
next z
end if
next y
next x

end sub

Habs aber nicht getestet…

Gruß
Ronny

Hi Ronny,

also irgendwas passt da noch nicht.
Dein makro leert mir nur die Zeilen. Ist aber kein Problem, habe einfach den Befehl clear durch delete getauscht und schon löscht es die Zeilen.

Aber es werden nur folgende Zeilen gelöscht:
Zeile in der das Wort Test steht (z.B. Zeile 4) Zeile darüber (Zeile 3) und Zeile 7.

Die Zeilen 1,2,5 und 6 bleiben bestehen, aber die sollen auch weg :smile:

Entschuldige bitte die Umstände.

Hallo Surrinan,

Ich möchte, dass ein Makro die Zellen nach einem bestimmten
Wort durchsucht.

Alle Spalten oder nur eine?

Wenn das Wort gefunden wurde, soll

  1. die Zeile gelöscht werden in der das Wort vorkommt,
  2. ebenfalls 3 Zeilen darüber gelöscht werden
  3. eine Anzahl x Zeilen darunter gelöscht werden

Was bedeutet „Anzahl x“?

Beispiel: Das Wort Test steht in Zelle B7 nun sollen also die
Zeilen B4 bis z.B. B18 gelöscht werden.

Wie kommst du auf die 18?

Einen kleinen Ansatz habe ich bereits.

Ja, ich sehe, ähem, *hüstel*, vielleicht wäre es sehr sinnvoll den Ansatz neu anzumischen :smile:

Davon abgesehen ist mir u.a. völlig unklar was geschehen soll wenn du in A1:K999 in B7, G23, A100, B110, usw. „Test“ stehen hast, was soll dann geschehen?

Gruß
Reinhard

alles klar, da hatte ich Dich falsch verstanden:

sub suche
dim x, y, z as byte

z=5 'ist die Variable für die darunter zu löschenden Zeilen

for x = 4 to 100
for y = 1 to 100
if activesheet.cells(x,y).value=„test“ then
activesheet.rows(x-3).clear
activesheet.rows(x-2).clear
activesheet.rows(x-1).clear
activesheet.rows(x).clear
activesheet.rows(x+1).clear
activesheet.rows(x+2).clear
activesheet.rows(x+3).clear
next y
next x

For x = 100 To 1 Step -1
If activesheet.cells(x, 1).Value = „“ Then
activesheet.Rows(x).Delete
End If
Next x

end sub

Das ist die einfachste Methode, wobei es für die Zeilen activesheet.rows(xxx).clear per Schleife bessere Methoden gibt. Aber für den Einblick in VBA viellei garnich so verkehrt :wink:

Gruß
Ronny

Am besten soll jede Zelle in jeder Spalte durchsucht werden :smile:

Anzahl x: X steht als variabel für eine bestimmte Zeilenanzahl zum Beispiel 10. Weil ich mir noch nicht sicher bin wieviele Zeilen wirklich gelöscht werden sollen.

Die 18 diente nur als Beispiel um evtl. besseres Verständnis zu schaffen. Könnte also auch 2365 sein. Wo wir wieder bei deiner ersten Frage wären, wofür das „x“ steht.

Ja mein Ansatz ist nicht perfekt und sicher voller Fehler, aber er hat schonmal einen Teil abgedeckt von dem was ich wollte. Und da es wie gesagt nur ein Teil war, habe ich hier auf Hilfe gehofft (und ja auch bekommen).

Hi nochmal :smile:

Nun bekomem ich folgende Fehlermeldung:
Fehler beim kompilieren
Next ohne For

und mir wird als Fehlerquelle die Zeile „next y“ markiert.
Du hast das Makro geschreiben, vielleicht kannst du mir auf die Sprünge helfen,a ber ich sehe da doch ein For.

Verwirrte Grüße

Guten Abend,

und nochmal ich (wer hätte das gedacht :smiley:).
Und zwar gäbe es noch eine andere Möglichkeit mit der ich ebenfalls zum Ziel kommen würde.

Das Makro müsste dazu die erste Zeile finden, die komplett leer ist und dann diese und die 10 (z.B.) nachfolgenden Zeilen löschen.

Beispiel:
Das Tabellenblatt enthält Daten von Zeile 1 - 20.
Folglich ist die Zeile 21 komplett leer. Demnach sollen die kompletten Zeilen 21 - 31 gelöscht werden

Vielleicht ist das einfacher zu realisieren, ich habe ja keine Ahnung, wie man bereits gemerkt hat :smile:

Danke nochmal!

Upps, da fehlte etwas. Hab’s mal noch verändert:

Sub suche()
Dim x, y, z

For x = 4 To 100
For y = 1 To 100
If ActiveSheet.Cells(x, y).Value = „test“ Then
For z = -3 To 3
ActiveSheet.Rows(x - z).Clear
Next z
End If
Next y
Next x

For x = 100 To 1 Step -1
If ActiveSheet.Cells(x, 1).Value = „“ Then
ActiveSheet.Rows(x).Delete
End If
Next x

End Sub

Gruß
Ronny

Supi *daumenhoch*

Dankesehr (mal wieder) :smiley:

Wünsche vorab ein schönes Wochenende!