Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile löschen wenn Bedingung erfüllt

Zeile löschen wenn Bedingung erfüllt
21.01.2015 11:41:40
Christian
Hallo zusammen,
ich würde eine Änderung an meinem Makro haben. Leider habe ich keine Ahnung wie ich das machen soll.
Mit dem Modul mdl_loeschen, was über die Schaltfläche Löschen gestartet wird. werden alle Zeilen gelöscht welche ein Häckchen in Spalte W haben.
Hier der Code:
Sub Loeschen()
Application.ScreenUpdating = False
Dim rngZelle As Range
Dim i As Integer
For i = 1 To 3 '3 Versuche
If InputBox("Das LÖSCHEN der Aufträge ist nur mit Passwort möglich - 24568") = "24568"  _
Then
Dim intBlatt As Integer
Dim lngZeile As Long
For intBlatt = 1 To 1 ' nur in der ersten Tabelle löschen ***
With Sheets(intBlatt)
loLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp). _
Row, Rows.Count)
For lngZeile = loLetzte To 5 Step -1 ' Löschen in Zeile 5 bis 1000 ***
If .Cells(lngZeile, "W") = "a" Then ' Suchen in Spalte W nach "a" ***
.Rows(lngZeile).Delete
End If
Next
End With
Next
Exit For
Else
MsgBox "Falsches Passwort"
End If
If i = 3 Then Exit Sub
Next
Application.ScreenUpdating = True
End Sub
Neu 1:
Es soll erst gelöscht werden wenn alle Positionen des Auftrags ein Häckchen in Spalte W haben.
Beispiel:
Der Auftrag 10122 darf noch nicht gelöscht werden, weil einige positionen noch keinen Hacken in Spalte W haben. Der Auftrag 11075 darf aber gelöscht werden. Es haben beide Positionen ein Hacken in Spalte W.

Neu 2: (Wenn möglich lieber diese Möglichkeit)
Nach klicken der Schaltfläche muss man die Auftragsnummer eingeben, welche man löschen will. Es muss dann geprüft werden ob alle Positionen einen Hacken in Spalte W haben. Wenn die der Fall ist soll eine Meldeung kommen "Auftrag gelöscht". Wenn nicht alle Positionen ein Hacken in Spalte W haben muss einen Meldung kommen das der Auftrag noch nicht komplett erledigt ist.
Die Musterdatei ist hier:
https://www.herber.de/bbs/user/95138.xlsm
Vielen Dank

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 12:00:33
Rudi
Hallo,
                    For lngZeile = loLetzte To 5 Step -1 ' Löschen in Zeile 5 bis 1000 ***
If WorksheetFunction.CountIf(Columns(2), Cells(lngZeile, 2)) =  _
WorksheetFunction.CountIfs(Columns(2), Cells(lngZeile, 2), Columns(23), Cells(lngZeile, 23)) Then
.Rows(lngZeile).Delete
End If
Next
Gruß
Rudi

Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 12:52:50
Daniel
Hi
eine Bitte: was du da in Spalte W stehen hast, sind Haken und keine Hacken.
Hacken hasst du an den Füssen oder ggf im Keller bei den Gartengeräten.
ich würde hier in einer Hilfsspalte per Formel die Zellen markieren, die gelöscht werden können.
bei kleineren Datenmengen kommt hierzu in Zelle X5 bis zum Tabellenende:
=WENN(ZÄHLENWENN(B:B;B5)=ZÄHLENWENNS(B:B;B5;W:W;"a");WAHR;0)
bei wenn die Tabelle nach Auftragsnummer sortiert ist, kannst du so den Rechenaufwand reduzieren:
=WENN(B4=B5;X4;WENN(ZÄHLENWENN(B:B;B5)=ZÄHLENWENNS(B:B;B5;W:W;"a");WAHR;0))
beim Löschen kannst du dann alle Zeilen löschen die in Spalte X mit WAHR gekennzeichnet sind.
das geht per Code so:
If Worksheetfunction.CountIf(Range("X:X"), True) > 0 Then
Range("X:X").SpecialCells(xlcelltypeformulas, 4).EntireRow.Delete
End If
wenn die Hilfsspalte beim normalen Umgang mit der Tabelle stört, kannst du sie auch per Code temporär einfügen.
Sieht als GesamtCode dann so aus (Tabelle nach Auftrag sortiert):
Sub LöschenX()
With ActiveSheet.Range("X5:X" & Cells(Rows.Count, 1).End(xlUp).Row)
.FormulaR1C1 = _
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
.Formula = .Value
If WorksheetFunction.CountIf(.Cells, True) > 0 Then
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End If
.ClearContents
End With
End Sub

gruß Daniel

Anzeige
OT: im Keller bei den Gartengeräten ...
21.01.2015 13:18:08
Klaus
... habe ich nur Harken stehen, aber keine Hacken. Da habe ich einen Haken hinter gemacht, die werde ich nie brauchen.
:-)
Grüße,
Klaus M.vdT.

im Keller bei den Gartengeräten ...
21.01.2015 21:15:30
Uduuh
Hallo,
... hab ich auch die ein oder andere Hacke. Also Hacken. ;-)
In der Tabelle sehe ich aber nur Haken.
Gruß aus’m Pott
Udo

Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 13:33:40
Christian
Danke Daniel,
ich habe einen Fehler gemacht.
Es ist nicht Spalte W. es ist Spalte X.
Könntest du mir das nochmal umbauen.
Danke

AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 13:41:57
Daniel
Hi
im Code das W durch ein X zu ersetzen und ein X durch ein Y, sollte dich nicht überfordern.
in der Formel ist der Zellbezug auf die Spalte mit dem Haken relativ ausgelegt, Formel muss immer in die Spalte direkt rechts neben der Spalte mit dem Haken eingefügt werden. Wenn das gegeben ist, spielt es keine Rolle in welcher Spalte der Haken und die Formel stehen.
Gruß Daniel

Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 13:48:11
Christian
Hallo Daniel,
ich meinte nicht die Formel. Für die Formel habe ich erst wieder in Spalte AD Platz.
Ich würde daher lieber das nutzen:
Sub LöschenX()
With ActiveSheet.Range("X5:X" & Cells(Rows.Count, 1).End(xlUp).Row)
.FormulaR1C1 = _
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
.Formula = .Value
If WorksheetFunction.CountIf(.Cells, True) > 0 Then
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
End If
.ClearContents
End With
End Sub
Dort kann ich natürlich das X durch ein W ersetzen. Aber ich kenne mich mit diesem noch nicht aus:
      .FormulaR1C1 = _
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
Es wäre sehr lieb wenn du mir helfen kannst.
Danke

Anzeige
AW: Zeile löschen wenn Bedingung erfüllt
21.01.2015 14:07:09
Daniel
HI
ich meinte schon die Formel in diesem Makro.
die Formel muss in die erste Freie Spalte am Tabellenende.
der zellbezug auf die Spalte mit dem Häkchen ist hier (FETT)
"=IF(RC2=R[-1]C2,R[-1]C,IF(CountIf(C2,RC2)=CountIfs(C2,RC2,C[-1],""a""),True,""""))"
das C[-1] bedeutet hier einen relativen zellbezug um eine Spalte nach links versetzt.
dh die Spalte mit den Häkchen muss direkt links neben der Spalte mit der Formel liegen.
ist der Abstand grösser, musst du die 1 eben anpassen.
alternativ kannst du natürlich auch die Spaltennummer absolut eingeben, dann folgt nach dem C (für Column) direkt die Spaltennummer (ohne Klammer), als Beispiel siehst du ja den Zellbezug auf die spalte B (2) für die Auftragsnummer.
dh wenn die Haken in Spalte X stehen kannst du hier auch C24 einsetzen, dann ist es auch egal, in welcher Spalte die Formel steht, weil du hier einen absoluten Zellbezug auf die Spalte verwendest.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

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

Zeile löschen, wenn Bedingung erfüllt


Schritt-für-Schritt-Anleitung

Um in Excel Zeilen zu löschen, wenn eine bestimmte Bedingung erfüllt ist, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, um dies zu erreichen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Sub Loeschen()
       Application.ScreenUpdating = False
       Dim rngZelle As Range
       Dim i As Integer
       For i = 1 To 3 '3 Versuche
           If InputBox("Das LÖSCHEN der Aufträge ist nur mit Passwort möglich - 24568") = "24568" Then
               Dim intBlatt As Integer
               Dim lngZeile As Long
               For intBlatt = 1 To 1 ' nur in der ersten Tabelle löschen ***
                   With Sheets(intBlatt)
                       loLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
                       For lngZeile = loLetzte To 5 Step -1 ' Löschen in Zeile 5 bis 1000 ***
                           If WorksheetFunction.CountIfs(.Columns(2), .Cells(lngZeile, 2), .Columns(23), "a") = WorksheetFunction.CountIf(.Columns(2), .Cells(lngZeile, 2)) Then
                               .Rows(lngZeile).Delete
                           End If
                       Next
                   End With
               Next
               Exit For
           Else
               MsgBox "Falsches Passwort"
           End If
           If i = 3 Then Exit Sub
       Next
       Application.ScreenUpdating = True
    End Sub
  4. Anpassen des Codes:

    • Ändere die Spaltenbezüge nach Bedarf. In diesem Beispiel wird in Spalte 23 (W) nach "a" gesucht.
  5. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle Loeschen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler 1: Das Makro löscht nicht die erwarteten Zeilen.

    • Lösung: Überprüfe, ob die Bedingungen im Code korrekt sind (z.B. Spaltennummern und Suchkriterien).
  • Fehler 2: Passwort wird nicht akzeptiert.

    • Lösung: Stelle sicher, dass das eingegebene Passwort korrekt ist.
  • Fehler 3: Excel bleibt hängen.

    • Lösung: Stelle sicher, dass die Bildschirmaktualisierung am Ende des Codes wieder aktiviert wird.

Alternative Methoden

Falls du keine VBA-Makros verwenden möchtest, gibt es auch alternative Methoden, um Zeilen zu löschen, wenn eine Bedingung erfüllt ist. Du kannst zum Beispiel:

  1. Die Filterfunktion verwenden:

    • Filtere die Daten, um nur die Zeilen anzuzeigen, die gelöscht werden sollen, und lösche sie manuell.
  2. Hilfsspalten nutzen:

    • Füge eine Hilfsspalte hinzu, die mit einer Formel überprüft, ob die Bedingung erfüllt ist. Beispiel:
      =WENN(ZÄHLENWENN(B:B;B5)=ZÄHLENWENNS(B:B;B5;W:W;"a");WAHR;0)

Praktische Beispiele

Hier ist ein Beispiel, wie du mit einem VBA-Makro Zeilen löschen kannst, wenn bestimmte Bedingungen in der Tabelle erfüllt sind:

  • Beispiel 1: Löschen von Aufträgen, wenn alle Positionen in Spalte W ein Häkchen haben.
  • Beispiel 2: Eingabe der Auftragsnummer zur gezielten Löschung.

Hier ist ein einfacher VBA-Code, der diese Funktionalität implementiert:

Sub AuftragLoeschen()
    Dim auftragsNummer As String
    auftragsNummer = InputBox("Bitte Auftragsnummer eingeben:")
    Dim lngZeile As Long
    ' Durchsuche die Tabelle
    For lngZeile = 5 To 1000
        If Cells(lngZeile, 1).Value = auftragsNummer Then
            If WorksheetFunction.CountIf(Range("W:W"), "a") = WorksheetFunction.CountIf(Range("A:A"), auftragsNummer) Then
                MsgBox "Auftrag gelöscht"
                Rows(lngZeile).Delete
            Else
                MsgBox "Auftrag noch nicht komplett erledigt"
            End If
            Exit For
        End If
    Next
End Sub

Tipps für Profis

  • Verwende Kommentare: Kommentiere deinen Code, um die Logik verständlicher zu machen.
  • Backup erstellen: Erstelle vor dem Löschen von Zeilen immer eine Sicherungskopie deiner Daten.
  • Testumgebung: Teste deine Makros in einer Kopie der Datei, um unerwünschte Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich Zeilen löschen, wenn die Bedingung nicht erfüllt ist? Du kannst die Logik im VBA-Code umkehren, indem du die Bedingungen anpasst, um die Zeilen zu löschen, die nicht deinen Anforderungen entsprechen.

2. Kann ich auch ohne Makros Zeilen löschen? Ja, du kannst die Filterfunktion oder Hilfsspalten verwenden, um die gewünschten Zeilen zu identifizieren und manuell zu löschen.

3. Ist es möglich, mehrere Bedingungen zu kombinieren? Ja, du kannst mehrere Bedingungen in deiner If-Anweisung oder in der Filterfunktion kombinieren, um präzisere Löschkriterien festzulegen.

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