Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA -Kriterium in Tabelle suchen und Zeile löschen

VBA -Kriterium in Tabelle suchen und Zeile löschen
21.05.2015 14:43:50
Michael
Hallo zusammen,
ich möchte in einer Tabelle mittels VBA innerhalb einer Spalte nach einem Wert suchen(Spaltenüberschrift lautet Name) und dieses mitsamt der ganzen Zeile löschen (gesuchter Wert Schmitz).
Am Beispiel erklärt:
Das Makro soll in der gesamten Tabelle innerhalb der Spalte "Name" nach dem Wert "Schmitz" suchen. Kommt dieser in einer Zeile vor so soll dann die komplette Zeile gelöscht werden.
Kann mir jemand hierzu einige Tipps geben?
Danke im voraus!
Gruß
Michael

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA -Kriterium in Tabelle suchen und Zeile löschen
21.05.2015 15:19:53
Nepumuk
Hallo,
soll das Makro selber nach der Spalte suchen oder ist die fest? Was wenn z.B. Schmitz-Maier in einer Zelle steht soll es dann trotzdem den Eintrag als gefunden ansehen? Was wenn es 2 oder 3 Schmitz gibt?
Gruß
Nepumuk

AW: VBA -Kriterium in Tabelle suchen und Zeile löschen
21.05.2015 15:31:36
Michael
Hallo Nepumuk,
die Spalte ist fest. Das Makro soll die komplette Zeile löschen wenn Schmitz vorkommt, und auch nur wenn das Kriterium in dieser Spalte und genau mit Schmitz vorkommt. Es gibt mehrere Schmitz. Das Makro soll alle davon mitsamt der kompletten Zeile löschen.
Danke und Gruß
Michael

Anzeige
VBA -Kriterium in Tabelle suchen und Zeile löschen
21.05.2015 15:38:36
Nepumuk
Hallo,
teste mal:
Public Sub Loeschen()
        Dim strReturn As String
        Dim objCell As Range
        Do
            strReturn = InputBox("Bitte den zu löschenden Namen eingeben.", "Eingabe")
            If StrPtr(strReturn) = 0 Then Exit Do
            With Columns("H") 'Spalte anpassen !!!!
                Do
                    Set objCell = .Find(What:=strReturn, LookIn:=xlValues, _
                        LookAt:=xlWhole, MatchCase:=True)
                    If Not objCell Is Nothing Then
                        objCell.EntireRow.Delete
                    Else
                        Exit Do
                    End If
                Loop
            End If
        End With
    Loop
End Sub

Gruß
Nepumuk

Anzeige
Da ist noch ein Fehler drin
21.05.2015 15:40:35
Nepumuk
So passts:
Public Sub Loeschen()
    Dim strReturn As String
    Dim objCell As Range
    Do
        strReturn = InputBox("Bitte den zu löschenden Namen eingeben.", "Eingabe")
        If StrPtr(strReturn) = 0 Then Exit Do
        With Columns("H") 'Spalte anpassen !!!!
            Do
                Set objCell = .Find(What:=strReturn, LookIn:=xlValues, _
                    LookAt:=xlWhole, MatchCase:=True)
                If Not objCell Is Nothing Then
                    objCell.EntireRow.Delete
                Else
                    Exit Do
                End If
            Loop
        End With
    Loop
End Sub

Anzeige
AW: Da ist noch ein Fehler drin
21.05.2015 16:05:24
Michael
Danke Nepumuk,
das klappt sehr gut jedoch nun folgendes Problem. Zwar ist die InputBox ne super Sache, jedoch in diesem Fall nicht nötig. Das Kriterium bleibt stets das gleiche oder kann ich dann dementsprechend im Code anpassen.
Ich würde zB auch gerne die einzelnen Sheets klar definieren damit das Makro entsprechend nacheinander die Löschvorgänge durchführt und die Prozedur unterscheidet sich je nach Sheet.
Ein Beispiel:
Angenommen 3 Sheets
im ersten kann der Wert sowohl in Spalte E aber auch in F vorkommen. In diesem Fall soll die komplette Zeile gelöscht werden.
im zweiten sheet kann der Werte auch in der Spalte E und F vorkommen. Die Zeile soll aber nur dann komplett gelöscht werden wenn der Wert in F vorkommt.
im dritten Sheet etwas komplzierter. Kommt der Wert in spalte E vor soll sie komplett gelöscht werden. Spalte F wiederum soll "Schmitz" enthalten, tut sie das nicht soll sie komplett gelöscht werden.
Kannst du ansatzweise verstehen um was es mir geht?
Gruß und schonmal Danke für deinen Code. An dem werde ich auf jeden Fall weiter arbeiten.
Michael

Anzeige
Null Bock auf Salamitaktik o.T.
21.05.2015 17:22:23
Nepumuk
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Suche und zum Löschen von Zeilen in Excel


Schritt-für-Schritt-Anleitung

Um in einer Excel-Tabelle mittels VBA nach einem Kriterium zu suchen und die entsprechende Zeile zu löschen, kannst du folgenden Code verwenden:

Public Sub Loeschen()
    Dim strReturn As String
    Dim objCell As Range

    strReturn = "Schmitz" ' Hier den zu löschenden Namen festlegen

    With Columns("H") ' Spalte anpassen, in der gesucht werden soll
        Do
            Set objCell = .Find(What:=strReturn, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
            If Not objCell Is Nothing Then
                objCell.EntireRow.Delete
            Else
                Exit Do
            End If
        Loop
    End With
End Sub

In diesem Code wird in der Spalte H nach dem Namen "Schmitz" gesucht und die gesamte Zeile gelöscht, wenn der Name gefunden wird. Du kannst die Spalte anpassen, indem du "H" durch eine andere Spaltenbezeichnung ersetzt.


Häufige Fehler und Lösungen

  1. Problem: Das Makro findet den Namen nicht.

    • Lösung: Stelle sicher, dass die Spaltenbezeichnung korrekt ist und der Name genau übereinstimmt (Groß- und Kleinschreibung sind relevant).
  2. Problem: Die InputBox wird angezeigt, obwohl ich einen festen Namen verwenden möchte.

    • Lösung: Setze den Namen direkt im Code, wie im obigen Beispiel gezeigt.
  3. Problem: Es werden nicht alle Zeilen gelöscht.

    • Lösung: Überprüfe, ob der Suchbegriff genau übereinstimmt. Der Code wurde so geschrieben, dass nur exakte Übereinstimmungen gelöscht werden.

Alternative Methoden

Falls du keine VBA-Lösung verwenden möchtest, kannst du auch Filter und manuelle Löschvorgänge in Excel nutzen:

  1. Filter setzen: Nutze die Filterfunktion in Excel, um nur die Zeilen mit dem gesuchten Namen anzuzeigen.
  2. Manuelles Löschen: Wähle die gefilterten Zeilen aus und lösche sie manuell.

Diese Methode ist weniger automatisiert, kann aber in einfacheren Szenarien hilfreich sein.


Praktische Beispiele

Um sicherzustellen, dass das Makro für verschiedene Szenarien funktioniert, kannst du den Code wie folgt anpassen:

  1. Beispiel für mehrere Spalten:
Public Sub Loeschen()
    Dim strReturn As String
    Dim objCell As Range

    strReturn = "Schmitz"

    ' Suche in Spalte E und F
    With Union(Columns("E"), Columns("F"))
        Do
            Set objCell = .Find(What:=strReturn, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
            If Not objCell Is Nothing Then
                objCell.EntireRow.Delete
            Else
                Exit Do
            End If
        Loop
    End With
End Sub
  1. Beispiel für spezifische Blätter:
Public Sub Loeschen()
    Dim ws As Worksheet
    Dim strReturn As String
    Dim objCell As Range

    strReturn = "Schmitz"

    ' Durchlaufe die Blätter
    For Each ws In ThisWorkbook.Worksheets
        With ws.Columns("E") ' Beispiel: Spalte E
            Do
                Set objCell = .Find(What:=strReturn, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
                If Not objCell Is Nothing Then
                    objCell.EntireRow.Delete
                Else
                    Exit Do
                End If
            Loop
        End With
    Next ws
End Sub

Tipps für Profis

  • Verwende Fehlerbehandlung: Integriere Fehlerbehandlungs-Statements, um sicherzustellen, dass das Makro auch bei unerwarteten Situationen stabil läuft.
  • Testen mit Kopien: Teste deine Makros immer auf Kopien deiner Daten, um Datenverluste zu vermeiden.
  • Dokumentation: Kommentiere deinen Code ausreichend, damit andere (oder du selbst später) verstehen, was jeder Teil des Codes macht.

FAQ: Häufige Fragen

1. Frage
Wie kann ich den Namen dynamisch eingeben?
Antwort: Du kannst eine InputBox verwenden, die den Benutzer zur Eingabe eines Namens auffordert.

2. Frage
Kann ich mehrere Namen auf einmal löschen?
Antwort: Ja, du kannst eine Schleife über ein Array von Namen implementieren und das Löschen für jeden Namen durchführen.

3. Frage
Funktioniert das auch in Excel 365?
Antwort: Ja, der Code ist mit Excel 365 und den meisten älteren Versionen kompatibel.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige