Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

Texte löschen, wenn Bedingung erfüllt

Texte löschen, wenn Bedingung erfüllt
08.02.2024 19:50:32
Christian
Hallo,

ich würde mich freuen, wenn jemandem von euch eine Lösung einfällt.
Die Bsp. Datei ist jetzt ausschließlich auf das beschränkt, was für mein Anliegen meiner Meinung nach relevant ist. Die Originaldatei hat 300 Spalten, 383 Zeilen und enthält unmenge an weiteren Texten, die aber nicht für mein Problem relevant sind.

https://www.herber.de/bbs/user/166922.xlsx

Mein Ziel ist es, alle Texte in meinem Blatt zu löschen, die mit movie: beginnen. Gut soweit mit Suchen und Ersetzen. Jedoch mit einer Einschränkung, steht 2 Zellen unter dem Text, der mit movie: beginnt ein Text, der mit dem Text aus Zeile 44 beginnt, soll er nicht gelöscht werden.

ZUrück zu meiner Bsp Datei

der Text movie: 123 in Zelle A48 soll gelöscht werden, weil der Inhalt von A50 nicht mit Text1 beginnt
der Text movie: def in Zelle A52 soll gelöscht werden, weil der Inhalt von A54 nicht mit Text1 beginnt
der Text movie: 456 in Zelle B52 soll nicht gelöscht werden, weil der Inhalt von B54 mit Text2 beginnt
der Text movie: abc in Zelle C56 soll gelöscht werden, weil der Inhalt von C58 nicht mit Text3 beginnt
der Text movie: 789 in Zelle D49 soll nicht gelöscht werden, weil der Inhalt von D51 mit Text4 beginnt
der Text movie: ghij in Zelle E48 soll gelöscht werden, weil der Inhalt von E50 nicht mit Text5 beginnt (Das dieser mit movie: beginnt spielt keine Rolle)
der Text movie: klmn in Zelle E50 soll dann wiederum gelöscht werden, weil der Inhalt von E52 mit Text5 beginnt


Texte die nicht mit movie: beginnen, sollen generell nicht gelöscht werden.
In den Zeilen 1 bis 43 kommen keine Texte, die mit movie: beginnen vor.

Hat da jemand eine Lösung?

Danke
Christian

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
08.02.2024 20:17:11
Yal
Hallo Christian,

amazing... Ich gehe davon aus, dass niemals "movie: " irgendwo mitte in einer Zelltext vorkommen kann

Probiere:
Version 1:
Sub selektivesLöschen()

Dim F, Z
Dim Startadresse As String
Dim bLöschBlocker As Boolean

With Worksheets("Tabelle1")
Set F = .Cells.Find(What:="movie: ", lookAt:=xlPart)
If F Is Nothing Then Exit Sub
Startadresse = Z.Address
Do
bLöschBlocker = False
For Each Z In .Range("A4:D44")
bLöschBlocker = CBool(InStr(1, F.Offset(2, 0).Value, Z.Value, vbTextCompare))
If bLöschBlocker Then Exit For
Next
If Not bLöschBlocker Then Z.clearcontent
Set F = .Cells.FindNext(F)
Loop While F.Address > Startadresse
End With
End Sub


Version 2 (genau gesehen, absolut dasselbe, aber irgendwie... strukturierter):
Sub selektivesLöschen()

Dim F As Range
Dim Startadresse As String

With Worksheets("Tabelle1")
Set F = .Cells.Find(What:="movie: ", lookAt:=xlPart)
If F Is Nothing Then Exit Sub
Startadresse = Z.Address
Do
If Not Gefunden(F.Offset(2,0).Value, .Range("A4:D44")) Then Z.clearcontent
Set F = .Cells.FindNext(F)
Loop While F.Address > Startadresse
End With
End Sub

Private Function Gefunden(Wert As String, Bereich As Range) As Boolean
Dim Z As Range
For Each Z In Bereich
If InStr(1, Wert, Z.Value, vbTextCompare) Then
Gefunden = True
Exit Function
End If
Next
End Function


VG
Yal
Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
08.02.2024 20:31:42
Christian
Hallo Yal, erstmal vielen Dank.

Oje, ja ich merke gerade, ich habe die letzten Änderungen vergessen zu speichern, bevor ich die Datei hochgeladen habe, 1000x sorry.
also hier jetzt erstmal die Mappe die auch Spalte E enthält

https://www.herber.de/bbs/user/166923.xlsm

Aber nichts desto trotz, ist Excel beim Ausführen sowohl in der Bsp Datei als auch der Originaldatei der Meinung ein Objekt sei erforderlich.

Schaust du bitte nochmal?

Danke
Christian

AW: Texte löschen, wenn Bedingung erfüllt
08.02.2024 20:53:00
daniel
Hi
nur so als Tipp:
da du uns nicht bezahlst, sind wir Helfer häufig etwas faul, und wenn wir uns sicher sind, dass ein Code funktioniert, dann schreiben wir den Code gerne mal direkt ins Forum, ohne ihn vorher in Excel zu testen, oder wir machen das häufig bei Verbesserungen, die uns erst einfallen, nachdem wir den Code ins Forum eingefügt haben.
Das birgt natürlich immer das Risiko von Tipp- und Rechtschreibfehlern, die dann nicht erkannt werden, außerdem fehlt die Hilfe der Intellisense.
In diesem Fall müsstest du dann so freundlich sein, diese Fehler zu korrigieren.
Du erkennst sowas immer daran, wenn VBA-Schlüsselwörter wie Befehle und Eigenschaften nur aus Kleinbuchstaben bestehen. VBA-Schlüsselwörter haben in der Regel mehrere Großbuchstaben, dh einen am Anfang und einen mitten im Wort. Hier ist zum Beispiel der Befehl "clearcontent" klein geschrieben und das heißt, dass er nicht geprüft wurde, weil der VBA-Editor diese Großschreibung automatisch einfügt, wenn der das Wort erkennt.
Wenn also ein Fehler auftritt und du findest in der Zeile, die den Fehler verursacht ein kleingeschriebenes Wort, dann solltest du als erstes dieses Wort korrigieren.
Hierzu tippst du die ersten paar Buchstaben ein und drückst dann STRG+LEER. Das aktiviert die Intellisense, welche dir die an dieser Stelle möglichen Schlüsselbegriffe in einer Klappliste anzeigt, die schon eigegebenen Buchstaben sind als Vorsteinstellung ausgewählt. Passt nur ein Begriff aus der Liste, so wird dieser gleich vervollständigt.


das zu Yals Lösung (und als allgemeiner Tip, wenn du programmieren lernen willst)

meine eigene Frage wäre:
welcher Begriff aus aus Zeile 44 bestimmt über das Löschverbot: nur der, der in der selben Spalte steht, oder ist es egal, irgendein Begriff aus Zeile 44?
also wenn in B54 jetzt nicht "Text2" stehen würde sondern "Text1" (welcher in A44 zu finden ist), sollte dann B52 gelöscht werden oder nicht?

Gruß Daniel
Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
08.02.2024 21:15:20
Christian
Hallo Daniel,

erstmal danke für den Tipp.

Jeder Text in Zeile 44 kommt nur einmal vor.
Verglichen werden soll nur in derselben Spalte. Was in anderen Spalten steht spielt keine Rolle.

Hoffe das reicht als Info
Christian
AW: Texte löschen, wenn Bedingung erfüllt
09.02.2024 11:42:52
Yal
Ach so: die Zelle, die 2 Zeile unter den gefundenen "Movie: " steht, muss nur mit dem Eintrag der eigene Spalte verglichen werden.

Dann so:
Sub selektivesLöschen()

Dim F As Range
Dim Adresse As String

With Worksheets("Update")
Set F = .Cells.Find(What:="movie: ", lookAt:=xlPart)
If F Is Nothing Then Exit Sub
Do
If F.Column >= 1 And F.Column = 5 Then
If InStr(1, F.Offset(0, 2).Value, .Cells(44, F.Column), vbTextCompare) = 0 Then
F.ClearContents
Else
If Adresse = "" Then Adresse = F.Address
End If
Set F = .Cells.FindNext(F)
Loop While Adresse > F.Address
End With
End Sub


Ich habe noch eine Änderung vorgenommen, weil im bisherigen Verfahren, falls die erste gefundene Stelle gelöscht wurde, entsteht eine Endlosschleife.

Aber alles in einem: ohne eine Einarbeitung in VBA und eine Auseinandersetzung mit dem gelieferten Code, wirst Du nie auf einem grüne Zweig kommen. Ich habe bereit mehrere Versionen geliefert. Es wird nicht unendlich werden. Irgendwann musst Du den Code zu deinem machen und selbst das Geschehen in die Hand nehmen. Klar, punktuelle Frage kann man beantworten. Aber es muss deinerseits sich weiterentwickeln.

VG
Yal

Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
09.02.2024 16:49:21
Christian
Hallo Yal,

soviel zu meinen VBA Kenntnissen, sie sind sicher nicht riesig, da hast du recht, aber zum rausfinden dass da ein End If gefehlt hat, reichen sie. Und dass bei F.Offset die beiden Zahlen vertauscht waren, auch.

Bin jedenfalls jetzt soweit:

Sub selektivesLöschen()

Dim F As Range
Dim Adresse As String

With Worksheets("Update")
Set F = .Cells.Find(What:="movie: ", lookAt:=xlPart)
If F Is Nothing Then Exit Sub
Do
If F.Column >= 1 And F.Column = 330 Then
If InStr(1, F.Offset(2, 0).Value, .Cells(44, F.Column), vbTextCompare) = 0 Then
F.ClearContents
Else
If Adresse = "" Then Adresse = F.Address
End If
End If
Set F = .Cells.FindNext(F)
Loop While Adresse > F.Address
End With
End Sub


Aber es hatte weiterhin alle Texte die mit movie: beginnen gelöscht.
Und dann begann die Verzweiflung...
Bis ich dann rausgefunden habe, dass ich Leerzeichen in Zeile 44 nicht bemerkt hatte und es gar nicht am Makro lag.

Jetzt scheint es zu funktionieren.

Danke
Christian

Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
09.02.2024 17:31:15
Yal
nur ein Tipp: das Einrücken hat eine Bedeutung. Es hilft, den Code zu verstehen. Dein hinzugefügter "End If" ist an der richtige Stelle, aber beachte folgenden Code. Es hat nur einen Einrücken als Unterschied, aber der Lesefluss ist ein ganz anderen:

Sub selektivesLöschen()

Dim F As Range
Dim Adresse As String

With Worksheets("Update")
Set F = .Cells.Find(What:="movie: ", lookAt:=xlPart)
If F Is Nothing Then Exit Sub
Do
If F.Column >= 1 And F.Column = 330 Then
If InStr(1, F.Offset(2, 0).Value, .Cells(44, F.Column), vbTextCompare) = 0 Then
F.ClearContents
Else
If Adresse = "" Then Adresse = F.Address
End If
End If
Set F = .Cells.FindNext(F)
Loop While Adresse > F.Address
End With
End Sub


VG
Yal
Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
09.02.2024 18:00:44
Christian
Aber eins verstehe ich trotzdem nicht. Instr gibt doch die Position aus, an der der Suchtext gefunden wurde, aber 0 ist doch keine Position und müsste ich dann nicht wenn ich =1 schreibe, erreichen dass nur gelöscht wird, wenn der Suchtext am Anfang steht?
AW: Texte löschen, wenn Bedingung erfüllt
12.02.2024 09:51:41
Yal
Hallo Christian,

Instr gibt nur eine Position zurück, wenn etwas gefunden würde. Diese ist dann >= 1.
Mit =0 testest Du, dass kein Treffer vorhanden ist.

Wenn das Ziel ist, zu löschen nur wenn der Text am Anfang steht, dann so
If InStr(1, F.Offset(2, 0).Value, .Cells(44, F.Column), vbTextCompare) = 1 Then

F.ClearContents 'die TrefferZelle "F" wird geleert und somit nicht von FindNext nochmal gefunden. Es könnte eine Endlosschleife entstehen
Else
If Adresse = "" Then Adresse = F.Address 'beim ersten Treffer, der nicht zu löschen ist, wird vermerkt "da waren wir schon mal."
End If


VG
Yal
Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
12.02.2024 11:28:45
Christian
Hallo Yal,

danke für die Erklärung.

Christian
AW: Texte löschen, wenn Bedingung erfüllt
08.02.2024 20:53:23
Yal
Ja,

ich habe mit einer Variablename angefangen und anschliessend auf einen anderen Namen umgeschwenkt und dabei nicht durchgängig aufgeräumt. Schlamperei.

Sub selektivesLöschen()

Dim F As Range
Dim Startadresse As String

With Worksheets("Update")
Set F = .Cells.Find(What:="movie: ", lookAt:=xlPart)
If F Is Nothing Then Exit Sub
Startadresse = F.Address
Do
If Not Gefunden(F.Offset(2, 0).Value, .Range("A44:E44")) Then F.ClearContents
Set F = .Cells.FindNext(F)
Loop While F.Address > Startadresse
End With
End Sub

Private Function Gefunden(Wert As String, Bereich As Range) As Boolean
Dim Z As Range
For Each Z In Bereich
If F > "" And InStr(1, Wert, Z.Value, vbTextCompare) Then
Gefunden = True
Exit Function
End If
Next
End Function

Habe noch eine Prüfung hinzugefügt: in der Quelle für den Vergleich (A44:E44) sollen leere Zellen ignoriert werden.

VG
Yal
Anzeige
AW: Texte löschen, wenn Bedingung erfüllt
08.02.2024 21:20:27
Christian
Hallo Yal,

das Makro löscht bei mir leider sämtliche Texte die mit movie: beginnen.
Kurz noch am Rande, falls du das nicht sowieso bereits berücksichtigt hast. Ich habe in B54 text absichtlich klein geschrieben, um zu zeigen, dass der Vergleich nicht Case Sensitive sein soll.

Gruß
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige