Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1800to1804
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen mit Suchbegriffen löschen

Zeilen mit Suchbegriffen löschen
23.12.2020 23:17:16
sbr
Hallo,
ich versuche in einer Spalte für mich belanglose Zeilen automatisch zu löschen. Aktuell habe ich quasi nur den letzten Teil meines Vorhabens erfolgreich umgesetzt:
https://www.herber.de/bbs/user/142539.xlsm

Sub Loeschefind()
Dim varY As String
Cells.Find(what:="Tabellenende").Activate
varY = ActiveCell.Row
If Not IsError(varY) Then Rows(varY & ":" & Rows.Count).Delete
End Sub

Hier löscht mir das Makro alle Zeilen bis zur Zeile mit dem gewünschten Suchbegriff. Wenn jedoch alles gelöscht ist und dieser Suchbegriff somit nicht mehr in der Tabelle vorhanden ist, dann spuckt mir Excel den Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt.
1. Wie krieg ich diesen Fehler weg? Wenn es den Suchbegriff nicht mehr gibt kann von mir aus eine Nachricht kommen, oder nichts passieren...aber Fehler ist unschön.
2. Wie lösche ich die Zeilen zwischen zwei Suchbegriffen? Also in diesem Fall von "Tabelle Start" (Zeile 6) bis "Ab hier fangen die Daten an" (Zeile 9)?
In den Zellen befindet sich Text und die Suchbegriffe stehen nicht alleine in der Zelle, aber immer in bekannter Weise am Anfang der Zelle.
Für Hilfe wäre ich sehr dankbar
Gruß
sbr

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen mit Suchbegriffen löschen
24.12.2020 04:41:32
Oberschlumpf
Hi,
hier, probier mal:
https://www.herber.de/bbs/user/142540.xlsm
Ich hab n paar Erklärungen in meinen Code geschrieben.
Hilfts?
Ciao
Thorsten
AW: Zeilen mit Suchbegriffen löschen
24.12.2020 13:28:24
sbr
Zunächst mal vielen Dank für deine Vorlage.
Ich habe jetzt den ganzen Vormittag damit gekämpft und habe sie mit paar weiteren Kniffen für mich sinnvoll einsetzbar gebracht.

Sub sbBlaBlaLoeschen()
Dim lloRow As Long
For lloRow = Cells(Rows.Count, 3).End(xlUp).Row To 6 Step -1 'die Suche beginnt in der  _
letzten, benutzten Zeile in Spalte C (hier ist es Zeile 34)
If Range("A" & lloRow).Value = "" Then 'nur wenn kein Eintrag in Spalte A in der  _
gerade geprüften Zeile...
If Left(Range("C" & lloRow).Value, 6)  "Anfang" And _
Left(Range("C" & lloRow).Value, 4)  "Ende" Then '...dann prüfe, ob der  _
Wert in Spalte C mit "Anfang" oder "Ende" beginnt. NUR wenn beides NICHT zutrifft...
Rows(lloRow - 1).Delete '...dann lösche die gerade geprüfte Zeile
End If
End If
Next
End Sub

Das Makro ermittelt zunächst die letzte Zeile in Spalte C und wenn die entsprechende Zelle in Spalte A leer ist, dann prüft er zwei Bedingungen ab:
Es werden in den Zellen der Spalte C die Werte ab der 6. bzw. 4. Stelle abgeschnitten und mit den entsprechend langen Suchbegriffen verglichen. Wenn in der Zelle beide Suchbegriffe NICHT gefunden werden und wenn A leer ist, dann wird die gerade geprüfte Zeile gelöscht.
Nun sind in meinem Fall in manchen Datensätzen auch die Zellen in Spalte A im zu löschenden Bereich auch befüllt und das Makro ignoriert diese dann und löscht sie nicht.
Hier habe ich einfach eine kleine Abwandlung zusammengeschrieben und lösch zunächst diese Zeilen:

Sub Aloeschen()
Dim Aloesch As Long
For Aloesch = Cells(Rows.Count, 1).End(xlUp).Row To 6 Step -1
If Range("A" & Aloesch).Value = "Stoerwort1" _
Or Range("A" & Aloesch).Value = "Stoerwort" _
Or Range("A" & Aloesch).Value = "Stoerwort" _
Or Range("A" & Aloesch).Value = "Stoerwort" _
Or Range("A" & Aloesch).Value = "Stoerwort" Then
Rows(Aloesch).Delete
End If
Next
End Sub

Somit funktioniert es für meinen Anwendungsfall ganz gut.
Nun aber noch drei Punkte:
1. Es dauert sehr lange und das Bild flackert wild rum. Hier habe ich unter Application.ScreenUpdating = False unter den Delete-Befehl geschrieben und es funktioniert viel schneller und flackert nicht mehr. War die Dauer des Durchlaufes also nur dem ScreenUpdating geschuldet?
2.Wenn die Daten mehr als eine Zeile einnehmen würden, dann würde das Ganze nicht funktionieren, da diese Zeilen dann auch gelöscht werden würden. Für diesen Fall habe ich mir folgendes Überlegt:

Sub sbBlaBlaLoeschen1()
Dim varX As Long
Dim varM As String
Dim varN As String
Dim varO As String
Dim varX1 As Long
Dim varM1 As String
Dim varN1 As String
Dim varO1 As String
Dim lloRow As Long
Dim varL As String
Cells.Find(what:="Tabellenende").Activate
varL = ActiveCell.Row
For lloRow = Cells(Rows.Count, 3).End(xlUp).Row To varL Step -1
If Range("A" & lloRow).Value = "" Then
If Left(Range("C" & lloRow).Value, 12)  "Tabellenende" Then
Rows(varL).Delete
End If
End If
Next
Cells.Find(what:="Ende Datensatz3").Activate
varM = ActiveCell.Row
Cells.Find(what:="Anfang Datensatz4").Activate
varN = ActiveCell.Row
For varX = Cells(varN, 3).End(xlUp).Row To varM Step -1
Rows(varX).Delete
Next
Cells.Find(what:="Anfang Datensatz4").Activate
varO = ActiveCell.Row
Rows(varO).Delete
Cells.Find(what:="Ende Datensatz2").Activate
varM1 = ActiveCell.Row
Cells.Find(what:="Anfang Datensatz3").Activate
varN1 = ActiveCell.Row
For varX1 = Cells(varN1, 3).End(xlUp).Row To varM1 Step -1
Rows(varX1).Delete
Next
Cells.Find(what:="Anfang Datensatz3").Activate
varO1 = ActiveCell.Row
Rows(varO1).Delete
End Sub

Hier Teile ich die Löschsuchen bis zum jeweils obersten Löschwert. Also zunächst alles bis zum Tabellenende.
Im nächsten Abschnitt suche ich die Zeile mit dem Oberen Suchwert und die Zeile mit dem Unteren Suchwort und lösche alles dazwischen ... das dann hintereinander bis ich oben angekommen bin...
Klappt zwar noch nicht ganz 100%, aber bin zuversichtlich es irgendwie so auch hinbiegen zu können.
3. Der Laufzeitfehler kommt immer noch.
Anzeige
AW: Zeilen mit Suchbegriffen löschen
24.12.2020 14:07:52
Oberschlumpf
zu 3.) bei mir kommt kein Laufzeitfehler. Mein Code läuft mit deiner Bsp-Datei 100%ig
Das könnte daran liegen, weil deine Bsp-Datei vom Aufbau und/oder Inhalt - nicht - deinem Original entspricht!
Erst in deiner Antwort auf meine Idee erzählst du was von "Nun sind in meinem Fall in manchen Datensätzen auch die Zellen in Spalte A im zu löschenden Bereich auch befüllt" oder "Wenn die Daten mehr als eine Zeile einnehmen würden".
Beide "Besonderheiten" gibt es nicht in deiner Bsp-Datei!
zu 1.)
ja, mit Verwendung von Screenupdating = False kann alles schneller, ohne Flackern durchgeführt werden.
Den Befehl hab ich vergessen, weil in deiner Bsp-Datei nur wenige Datenzeilen vorhanden sind. Da kam es nicht zum Flackern.
zu 2.)
siehe bei zu 3.), letzter Teil
Ciao
Thorsten
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige