Clever-Excel-Forum

Normale Version: [VBA] Spalte nach Begriff absuchen und alle Zeilen löschen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

ich versuche es noch ein Mal.

Ich habe ein Spalte, in denen unsortiert verschiedene Begriffe stehen - die Begriffe kommen häufig doppelt vor. Nun möchte ich mit einem Code die Spalte nach bestimmten Begriffen absuchen und alle entsprechenden Zeilen löschen.
Bislang habe ich das nur so weit, dass er die erste gefundene Zeile löscht.


Code:
Private Sub Commandbutton_loeschen_Click()

   Dim finden As Range

   Set finden = Range("A:A").Find(what:=ListBox_Namensliste.Value)
   ThisWorkbook.Sheets("Tabelle1").Rows(finden.Row).Delete

End Sub


Sollte ich da eine Do-Loop-Schleife einbauen? Kann mir jemand helfen?

Danke im voraus :)
Moin!
Filtere nach dem "bestimmten Begriff" und lösche SpecialCells(xlCellTypeVisible).EntireRow
Je nach Tabellengröße kann es sinnvoll sein, vorher zu sortieren, so dass der Löschbereich unfragmentiert ist.

Gruß Ralf
Hallo Ralf,

danke für deine Antwort. Das Problem ist, dass die Spalte unsortiert ist und aufgrund der Art, wie sie gefüllt wird, auch unsortiert bleibt. Die Spalte wird über eine Userform gefüllt. Oder meinst du, dass ich sie vorher sortieren sollte per VBA?

1. Wie würde der Befehl denn dafür aussehen?

2. Was meinst du mit "(...) lösche Specialcells (...) ?
(19.08.2018, 10:10)EasY schrieb: [ -> ]2. Was meinst du mit "(...) lösche Specialcells (...) ?

2. https://docs.microsoft.com/en-us/office/...ecialCells

Zitat:1. Wie würde der Befehl denn dafür aussehen?

1. Für Spalte A:

Code:
Cells(1).CurrentRegion.Sort Cells(2, 1), Header:=xlYes


Bei sortierten Listen kannst Du auch die .Find-Methode anwenden:
Wenn Du diese nur zweimal, also ohne Schleife, nutzen willst, switche die SearchDirection:=
https://docs.microsoft.com/en-us/office/...hdirection

Du solltest Dich ohnehin mal intensiv mit der .Find-Methode auseinandersetzen!
https://docs.microsoft.com/en-us/office/...Range.Find

Dein Minimalismus kann nämlich gehörig in die Hose gehen, da gewisse Parameter gespeichert werden (steht im letzten Link)!

Auch hier wieder mein erhobener Zeigefinger:
Für einen Anfänger sind UserForms eine unfassbare Quelle von allen möglichen Fehlern!
Trage direkt in die Liste ein und Du ersparst Dir unnütze Arbeit.

Allerdings sind UFs natürlich eine hervorragende Basis zum üben.
In einer Produktivdatei haben sie allerdings nichts zu suchen, wenn Du Dir Ärger ersparen willst.

Gruß und two Cents,
Ralf
Hallo Ralf,

mein Englisch ist nicht das Beste - gibt es solche Anleitungen auch in deutscher Sprache?

Meine bisherigen VBA-Kenntnisse habe ich aus einer Video-Reihe und bislang haben sie auch funktioniert, wenn ich sie nachgebaut habe - allerdings wird da nicht alles haarklein außereinandergenomen, deswegen bin ich hier.

Natürlich könnte man die Listen auch manuell füllen, allerdings sieht das nicht sehr schön aus, die Datei soll zudem von anderen genutzt werden, die von Excel überhaupt gar keine Ahnung haben. Das Einzige, was ich mit den Userforms mache, ist das Löschen und Füllen von einfachsten Listen - mehr soll da nicht passieren!

Mal angenommen, ich sortiere die Liste nach dem Suchbegriff. Was soll dann passieren in deiner Variante? Das erschließt sich mir momentan noch nicht. Vielleicht kannst du das erst ein Mal in Worten hier schreiben. Danke
(19.08.2018, 11:01)EasY schrieb: [ -> ]mein Englisch ist nicht das Beste - gibt es solche Anleitungen auch in deutscher Sprache?

Zunächst mal ist VBA ja ebenfalls englisch (zumindest in allen Versionen nach Excel 5.0, dort gab es noch die unsägliche lokalisierte Version).
Microsoft überarbeitet gerade die Online-Hilfe komplett und nutzt sinnvollerweise English als Arbeitssprache.
Aber Du kannst ja eine Suchmaschine bemühen.

Ich bin jetzt bis heute Abend offline.
Bis dahin solltest Du mal Deine Datei hochladen, dann erkläre ich Dir gerne die zwei Punkte.

Gruß Ralf
ok ... hab nen schönen Tag.

Ich könnte dir natürlich meine Tabelle zur Verfügung stellen, die zu anonymisieren etc. würde allerdings länger dauern, als eine neue Mappe zu erstellen und in Spalte A wahllos einige Namen aufzuführen. Darum geht es ja im Prinzip.


Ich habe nun noch ein wenig recherchiert und etwas zusammengebastelt, was in etwa meinem Gedankenkonstrukt entspricht. Was hälst du davon?


Code:
Sub Loeschen()

Dim anzahl As Long
anzahl = WorksheetFunction.CountIf(Range("A:A"), "Name")

Dim x As Integer
   x = 0

       Do
           x = x + 1
           Dim finden As Range
           Set finden = Range("A:A").Find(what:="Name")
           ThisWorkbook.Sheets("Tabelle1").Rows(finden.Row).Delete
       Loop Until x = anzahl



End Sub
(19.08.2018, 13:22)EasY schrieb: [ -> ]Was hälst du davon?
Bis auf die Tatsache, dass Du nicht berücksichtigst, welches Argument im Parameter LookAt:= gespeichert ist, ist es i.O., wenngleich die .Find-Methode etwas langsam ist.
(dies ist aber bei üblichen Datei-Größen kein Problem)
Nochmal:
Deine Methode kann Dir durchaus Herrn Müller-Lüdenscheid und Frau Grassmüller löschen, owohl Du nur Firma Müller löschen willst, weil Du unsauber proggst!
Gruß Ralf
Hey Ralf,

danke für den Hinweis ... wenn ich .find (what:="Begriff", lookat:=xlwhole) eingebe, verhindere ich die Ungenauigkeit?
Probieren geht über studieren!  :19:
Vorweg: Exakt so ist es!
Seiten: 1 2