15.6k Aufrufe
Gefragt in Tabellenkalkulation von joopiter Einsteiger_in (15 Punkte)
Hallo zusammen,

ich bin ganz neu auf dem Gebiet der Makros und benötige Hilfe!
Ich benötige ein Makro das eine Zeile immer dann löscht wenn ein bestimmtes Wort darin vorkommt. die relevanten Wörter stehen entweder in Spalte B oder E. Also müßten nur diese Spalten geprüft werden. Die Zeile gelöscht werden wenn eines der Wörter irgenwo in diesen beiden spalten vorkommt. Ich bräuchte das Makro so, dass ich gleich die verschiedenen Wörter eingeben kann und das Makro somit nur einmal gestartet werden muß. Das Löschen der Zeile soll erfolgen wenn eines der Wörter vorkommt.
Ich habe noch Excel 2000.
Ich habe ein paar Makros ausprobiert aber die meisten funktionieren einfach nicht.

dieses Makro löscht zwar Zeilen, aber komischerweise nicht alle mit dem Wort, es sind immer noch welche übrig.
Sub such()
Dim suche1 As Range
Dim zaehler1 As Long
Application.ScreenUpdating = False
For zaehler1 = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Set suche1 = ActiveSheet.Range("E" & zaehler1 & ":A" & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1).Find("Wort1", LookIn:=xlValues)
If Not suche1 Is Nothing Then
zaehler1 = suche1.Row
ActiveSheet.Range(suche1.Row & ":" & suche1.Row).Delete Shift:=xlUp
End If
Next zaehler1
Application.ScreenUpdating = False
MsgBox "Es wurden " & i & " Zeilen gelöscht"
End Sub

die zahl der gelöschten Zeilen wird auch nicht angezeigt.

Kann mir bitte jemand helfen? danke!

Grüße, Joopiter

17 Antworten

0 Punkte
Beantwortet von
Hallo liebe Experten

Ich bekomme leider eine Fehlermeldung. Bei mir muss die Spalte J durchsucht und bei vorhandenem Wert die ganze Zeile geloescht werden. Kann mir jemand erklaeren was ich falsch Verstanden habe resp. was ich falsch gemacht habe bei der Anpassung?



Vielen lieben Dank im voraus.


Sub Loeschen()
Dim lngZeile As Long
Dim lngZaehler As Long
Dim arrWerte()
Dim bytWerte As Byte
arrWerte = Array("DO NOT USE", "DO", "NOT", "USE")
Application.ScreenUpdating = False
For lngZeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
For bytWerte = 0 To UBound(arrWerte())
If InStr(Cells(lngZeile, 10), arrWerte(bytWerte)) > 0 Or _
InStr(Cells(lngZeile, 5), arrWerte(bytWerte)) > 0 Then
Rows(lngZeile).Delete shift:=xlUp
lngZaehler = lngZaehler + 1
End If
Next bytWerte
Next lngZeile
Application.ScreenUpdating = True
MsgBox "Es wurden " & lngZaehler & " Zeilen gelöscht"
End Sub
0 Punkte
Beantwortet von
bitte entschuldigt, hab etwas wenig geschlafen.

Das Makro funktioniert natuerlich tiptop. Ein kleine Frage bleibt aber noch betreffend dem range:

Wie kann ich hier eingrenzen, das der suchbereich zbsp.
spalte H - N betragen soll?

If InStr(Cells(lngZeile, 10), arrWerte(bytWerte)) > 0 Or _
InStr(Cells(lngZeile, 5), arrWerte(bytWerte)) > 0 Then



Es gibt sicher eine bessere Loesung wie meine, pro Spalte ein Makro laufen zu lassen.. :o)

Vielen lieben Dank und liebe Gruesse
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Thomy,

du musst nur die Codezeile mit den Or-Operanden auf 7 Instr-Anweisungen erweitern und als Spaltenbezeichnung 8 bis 14 verwenden.

Bis später,
Karin

PS: noch ein Hinweis - "DO NOT USE" benötigst du als Vergleichsbegriff in dem Array nicht, da schon auf die darin enthaltenen einzelnen Bgriffe "DO", "NOT" und "USE" geprüft wird .
0 Punkte
Beantwortet von
Danke fuer die schnelle Antwort

Ich nehme an ich habe es mir etwas zu einfach gemacht:

If InStr(Cells(lngZeile, 8), arrWerte(bytWerte)) > 7 Or _
InStr(Cells(lngZeile, 14), arrWerte(bytWerte)) > 7 Then

Da Du dich nun hoffentlich von deinem Lachkrampf erholt hast ;-) kannst du mir vieleicht sagen wo ich diese Anpassungen korrekt vornehmen soll.

Ich bin leider wirklich nicht sehr begabt im VBA. (habe erst angefangen)

Vielen Dank und ilebe Gruesse
Thomy

PS: ich bin gerade im Ausland daher melde ich mich erst jetzt. 6 Stunden Zeitunterschied :)
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Thomy,

weshalb sollte ich lachen? Jeder hat doch irgendwann mal angefangen, und - es kann nur besser werden :-).

Du musst alle Spalten einzeln aufführen, also nach diesem Prinzip:
If InStr(Cells(lngZeile, 8), arrWerte(bytWerte)) > 0 Or _
InStr(Cells(lngZeile, 9), arrWerte(bytWerte)) > 0 Or _
InStr(Cells(lngZeile, 10), arrWerte(bytWerte)) > 0 Or _
InStr(Cells(lngZeile, 11), arrWerte(bytWerte)) > 0 Or _ usw.

Die Funktion Instr() ermittelt, an welcher Position im Zellinhalt sich der gesuchte Begriff befindet. Im gegebenen Fall muss man ja nicht wissen, an welcher Position genau sich der Wert befindet, sondern nur ob er überhaupt enthalten ist. Das Ergebnis 0 besagt, dass der Begriff nicht enthalten ist, folglich ist er enthalten wenn das Ergebnis > 0 ist.

Bis später,
Karin
0 Punkte
Beantwortet von
Hi nighty!
Du bist genial! :-)  Vielen Dank.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
Hallo Mister X und Community

Schön zu wissen das ältere Ideen(Makros)  immer noch zu Lernzwecken genutzt werden!

@Mister X

Ein kleiner Vers soll dich begleiten und dir Glück bringen!

https://www.youtube.com/watch?v=aI2A799Y3vY&t=85s

Gruß Nighty
...