Hallo Experten,
ich habe mir eine kleine Subroutine geschrieben, die gesamte zeilen löscht, wenn ein Stichwort drin vorkommt.
Sub Delete(arStr2Del, wksLokal As Worksheet)
Dim i
Dim intAnz
Dim j
For i = 0 To UBound(arStr2Del)
intAnz = Application.WorksheetFunction.CountIf(wksLokal.Cells, "\*" & arStr2Del(i) & "\*")
For j = 1 To intAnz
'If Application.WorksheetFunction.CountIf(wksLokal.Cells, "\*" & arStr2Del(i) & "\*") \> 0 Then
wksLokal.Cells.Find(What:=arStr2Del(i) & "\*").EntireRow.Delete
'End If
Next j
Next i
End Sub
Jetzt benötige ich eine Lösung, die genau das umgekehrt macht:
Die zeilen wieder herstellt *scherz*
Nein ich benötige eine Lösung, die alle Zeile löscht, die das Keywort nicht enthalten.
Geht das? Oder muss ich die Zeilen kopieren und in ein neues Sheet einfügen?
Liebe Grüße
Winter
Hallo Winter,
Jetzt benötige ich eine Lösung, die genau das umgekehrt macht:
Die zeilen wieder herstellt *scherz*
ginge auch, kein Scherz.
)
Nein ich benötige eine Lösung, die alle Zeile löscht, die das
Keywort nicht enthalten.
Je nach dem was in arStr2Del steht und was in der Tabelle hast du ggfs. ruckzuck ein leeres Blatt.
arStr2Del(0)=„xyz“
arStr2Del(1)=„abc“
die tabelle sieht so aus:
xyz
abc
xyz
abc
xyz
abc
Wenn du dann wieder die Werte einzeln abprüfst, so ist nach arStr2Del(0) die Tabelle nur noch so:
xyz
xyz
xyz
Nach Prüfung auf arStr2Del(1) ist die Tabelle leer.
Geht das?
Mutmaßlich mußt du die Prüfwerte per And verbinden,
also lösche alle Zeilen die „xyz“ UND „abc“ NICHT enthalten.
Gruß
Reinhard
Servus Reinhard,
ginge auch, kein Scherz.
)
Geht alles, ist mir klar. Ist nur eine Frage des Aufwandes.
Mutmaßlich mußt du die Prüfwerte per And verbinden,
also lösche alle Zeilen die „xyz“ UND „abc“ NICHT enthalten.
uhh
das ist mir nicht ganz klar. Kansnt Du etwas ausformuleiren?
Vielleicht habe ich mich schlecht ausgedrückt:
Ich habe eine Tabelle die sieht so aus
abc
xyz
abc
def
abc
def
xyz
def
Wenn ich mein obiges Makro mit def als suche drüber laufen lassen kommt
abc
xyz
abc
abc
xyz
raus. genau was ich will. Funktioniert.
Aber jetzt will ich dass das Makro aus der Tabelle:
def
def
def
macht, wenn ich das def Stichwort übergebe.
Was geht ist natürlich (grober Code):
i=1
while i
oder
For i=1 to letzteZeile
if cells(1,5)= "def" then
entirerow.copy
wksNeuesBlatt.paste Shift:=xlDown
end if
next
aber ich denke das dauert Ewigkeiten. Obige Lösung ist rasend schnell, zumindest beim löschen.
Grüße Winter
Servus Winter,
Mutmaßlich mußt du die Prüfwerte per And verbinden,
also lösche alle Zeilen die „xyz“ UND „abc“ NICHT enthalten.
uhh
das ist mir nicht ganz klar. Kansnt Du etwas ausformuleiren?
Angenommen du hast eine Kundenliste, nun willst du nur die Kundenzeilen sehen der Kunden die in Hamburg oder München wohnen.
Wenn du nun in einer Schleife alle Zellen abklapperst und prüfst ob der Kunde in Hamburg wohnt und wenn nicht die Zeile löschst, so hast du dann das problem daß du gar nicht mehr nach Kunden in München zu suchen brauchst in einer zweiiten Schleife, weil deren Zeilen schon grad gelöscht wurden.
Also mußt du gleich in der Schleife nach den Zeilen suchen die „Hamburg“ UND „München“ NICHT enthalten und diese löschen.
Aber jetzt will ich dass das Makro aus der Tabelle:
macht, wenn ich das def Stichwort übergebe.
Nur ein Stichwort ? Im Anfangscode sah es nach mehreren Stichwörtern aus.
Nimm doch einen Autofilter, filter nach „def“ und kopiere das Ergebnis raus.
Gruß
Reinhard
Hallo Reinhard,
Mutmaßlich mußt du die Prüfwerte per And verbinden,
also lösche alle Zeilen die „xyz“ UND „abc“ NICHT enthalten.
uhh
das ist mir nicht ganz klar. Kansnt Du etwas ausformuleiren?
Angenommen du hast eine Kundenliste, nun willst du nur die
Kundenzeilen sehen der Kunden die in Hamburg oder München
wohnen.
Wenn du nun in einer Schleife alle Zellen abklapperst und
prüfst ob der Kunde in Hamburg wohnt und wenn nicht die Zeile
löschst, so hast du dann das problem daß du gar nicht mehr
nach Kunden in München zu suchen brauchst in einer zweiiten
Schleife, weil deren Zeilen schon grad gelöscht wurden.
Also mußt du gleich in der Schleife nach den Zeilen suchen die
„Hamburg“ UND „München“ NICHT enthalten und diese löschen.
Nun, das ist so auch nicht ganz richtig, denn es wird wohl eher die Ausnahme sein, dass ein Kunde in Hamburg UND München wohnt, das heißt letztlich, das wohl kaum eine Zeile gelöscht wird.
Die Lösung kann somit nur sein, in einer Schleife zu prüfen, ob der Kunde, um bei dem Beispiel zu bleiben, in Hamburg ODER München wohnt. Also nicht zwei Schleifen, sondern eine, die bei dem einen Durchlauf von Zelle zu Zelle prüft, ob … oder …
Nimm doch einen Autofilter, filter nach „def“ und kopiere das
Ergebnis raus.
sehr gute Idee, ich würde aber gleich nach „enthält nicht“ (benutzerdefiniert) filtern und die gefilterten Zeilen löschen, dann bleibt das, was soll
LG Marion
Gruß
Reinhard
Hallo Marion,
Also mußt du gleich in der Schleife nach den Zeilen suchen die
„Hamburg“ UND „München“ NICHT enthalten und diese löschen.
Nun, das ist so auch nicht ganz richtig, denn es wird wohl
eher die Ausnahme sein, dass ein Kunde in Hamburg UND München
wohnt, das heißt letztlich, das wohl kaum eine Zeile gelöscht
wird.
leider nein. Meine Aussage bedeutet, daß diejenigen Zeilen gelöscht werden, die weder „Hamburg“ noch „München“ enthalten.
Nimm doch einen Autofilter, filter nach „def“ und kopiere das
Ergebnis raus.
sehr gute Idee, ich würde aber gleich nach „enthält nicht“
(benutzerdefiniert) filtern und die gefilterten Zeilen
löschen, dann bleibt das, was soll
Okay, da kennst du dich besser aus, benutze das wenig 
GuK
Reinhard
Hallo Winter,
ich habe noch nicht registriert, ob dieser Text, den du suchst allein in einer Zelle in der Zeile steht oder Teil einer Zelle ist
ich bin mal bei dem Beispiel mit Hamburg geblieben, das Wort auszuwechseln ist wohl nicht problematisch
es werden alle Zeilen in Tabelle1 gelöscht, die nicht das Wort Hamburg enthalten
Sub bestimmteZeilenLoeschen()
Sheets("Tabelle1").Activate
Range("a1").Select
Do Until IsEmpty(ActiveCell.Value)
If ActiveCell.Value ("Hamburg") Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub
Gruß
Marion
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Marion, hallo Rainhard,
Danke für Eure Antworten,
Nimm doch einen Autofilter, filter nach „def“ und kopiere das
Ergebnis raus.
sehr gute Idee, ich würde aber gleich nach „enthält nicht“
(benutzerdefiniert) filtern und die gefilterten Zeilen
löschen, dann bleibt das, was soll
Kann ich Autofilter auch in VBA setzten und verwenden? Wußte ich bisher nicht.
Grüße
Winter
Kann ich Autofilter auch in VBA setzten und verwenden? Wußte
ich bisher nicht.
Hallo Winter,
ja, zeichne es mit dem Rekorder auf.
Gruß
Reinhard