Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile löschen, wenn mehrere Bedingungen

Zeile löschen, wenn mehrere Bedingungen
08.03.2007 16:11:00
Mario
Mahlzeit !
Möchte gern damit :
Sub LoeschenT()
Dim lngI As Long
Application.ScreenUpdating = False
For lngI = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If ActiveSheet.Cells(lngI, 1) = "10" Then ActiveSheet.Cells(lngI, 1).EntireRow.Delete
Next lngI
Application.ScreenUpdating = True
End Sub

alle Zeilen löschen, in denen die Zahl 10, aber auch die Zellen/Zeilen, in denen noch mehrere andere Sachen vorkommen, d.h. wenn mindestens eine der Bedingungen zutrifft.
Die Tabelle besteht nur aus Spalte A und ca. 1500-2000 Zeilen.
Problem ist, ich habe so ca. 40 Werte, bei deren Auftreten die Zeile komplett gelöscht werden muss, brauche also noch so ne Art "Zeilenumbruch" im Code. Stehe hier auf dem Schlauch... Oder sollte man das vielleicht eleganter lösen ? Könnte mir jemand kurz helfen ?
Danke, Mario
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile löschen, wenn mehrere Bedingungen
08.03.2007 17:09:00
Mario
Natürlich (und sinnvoller) würde auch gehen, alles zu löschen bis auf die Zeilen, in denen Zahl1, Zahl 2 oder Zahl 3 vorkommen.
Ist bestimmt logischer und einfacher. Hilft mir jemand auf die Sprünge ?
AW: Zeile löschen, wenn mehrere Bedingungen
08.03.2007 20:14:00
Daniel
Hallo
naja, das kommt immer darauf an, obs mehr Zahlen gibt, bei denen gelöscht werden soll oder mehr Zahlen, bei denen nicht gelöscht werden soll.
für solche Fälle, bietet sich aber immer die Select Case Methode an, dein Code würde dann so aussehten:
Im Beispiel bleiben die Zeilen stehen, die eine 1, 5 oder 20 enthalten.
falls du andere Zahlen hast, musst du das noch anpassen.
Sub LoeschenT()
Dim lngI As Long
Application.ScreenUpdating = False
For lngI = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
Select Case Cells(i, 1)
Case 1, 5, 20
'nichts machen
Case Else
Rows(i).Delete
End Select
Next lngI
Application.ScreenUpdating = True
End Sub

Es gibt noch andere möglichkeiten, sowas zu machen.
Dieser Variante hier sollte bei grossen Datenmengen wesentlich schneller sein, als eine Schleife mit IF-Abfrage oder SELECT CASE.
Das Bespiel wieder für die Zahlen 1, 5 und 20
Sub schneller_löschen()
Dim lngI As Long
lngI = Cells(Rows.Count, 1).End(xlUp).Row
Columns(1).Insert
With Range("A1:A" & lngI)
.FormulaLocal = "=WENN(ODER(B1=1;B1=5;B1=20);ZEILE();"""")"
.Formula = .Value
.CurrentRegion.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.EntireColumn.Delete
End With
End Sub

Anzeige
AW: Zeile löschen, wenn mehrere Bedingungen
09.03.2007 08:23:00
Mario
Hi Daniel,
variante 2 klappt sehr gut, allerdings sieht meine Datei etwa so aus (alles Spalte A) :
32 4453017.2410 5699372.1530 125.6460 31800700 0 0 0 0
33 4453016.9120 5699371.5880 125.6520 1190 9412 0 0 0
34 4453015.4790 5699371.8550 125.6630 3280 0 0 0 0
35 4453014.8770 5699370.6500 125.6490 31800700 0 0 0 0
36 4453015.2620 5699371.0960 125.6140 1190 9409 0 0 0
37 4453014.8930 5699370.7650 125.6590 10 9409 0 0 0
38 4453015.1590 5699370.7940 125.6140 10 9409 0 0 0
39 4453015.3900 5699370.8910 125.6220 10 9409 0 0 0
40 4453015.5310 5699371.1370 125.6260 10 9409 0 0 0
Wenn ich jetzt die Zeilen mit der 1190/3280/31800700 behalten will, müsste es irgendwie so aussehen :
.FormulaLocal = "=WENN(ODER(B1=1190;B1=3280;B1=31800700);ZEILE();"""")".
Wie fummel ich hier die entspr. Ausdrücke dazu ?
So: "* 1190 *"; etc ?
Anzeige
AW: Zeile löschen, wenn mehrere Bedingungen
09.03.2007 18:20:00
Daniel
Hallo
wenn das alles in einer Spalte steht dann sinds ja keine Zahlen mehr, sondern Texte.
da musst du wahrscheinlich mit den Textfunktionen SUCHEN, FINDEN und ISTFEHLER eine Formel zusammenbasteln, die du dann ins Makro einsetzt.
ggf geht auch was mit ZählenWenn.
Die Formel kannst du ja auch direkt in Excel ausprobieren und dann wenn sie funktioniert ins Marko reinkopieren.
Solltest du innerhalb der Formel Anführungszeichen verwenden, müssten diese im Makrotext verdoppelt werden.
probier mal das hier:
.formulalocal = _
"=WENN(ZÄHLENWENN(B1;""*1190*"")+ZÄHLENWENN(B1;""*3280*"")+ZÄHLENWENN(B1;""*31800700*"")=0;WAHR;ZEILE())"
Gruß, Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel löschen, wenn mehrere Bedingungen erfüllt sind


Schritt-für-Schritt-Anleitung

Um in Excel mehrere Zeilen zu löschen, wenn eine oder mehrere Bedingungen erfüllt sind, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Code einfügen: Kopiere und füge den folgenden Code in das Modul ein:

    Sub LoeschenT()
       Dim lngI As Long
       Application.ScreenUpdating = False
       For lngI = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
           Select Case Cells(lngI, 1)
               Case 1, 5, 20 ' Hier die Werte einfügen, bei denen die Zeilen bleiben sollen
                   ' nichts machen
               Case Else
                   Rows(lngI).Delete
           End Select
       Next lngI
       Application.ScreenUpdating = True
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Dieses Makro löscht alle Zeilen, die nicht die angegebenen Werte enthalten.


Häufige Fehler und Lösungen

  1. Fehler: "Typenübereinstimmung"

    • Lösung: Stelle sicher, dass die Werte, die du suchst, die richtigen Datentypen haben (Zahlen vs. Text).
  2. Problem: Zeilen werden nicht gelöscht

    • Lösung: Überprüfe, ob der Bereich korrekt festgelegt ist und die Bedingungen im Select Case richtig definiert sind.
  3. Makro läuft zu langsam

    • Lösung: Verwende Application.ScreenUpdating = False, um das Flackern des Bildschirms zu vermeiden und die Ausführung zu beschleunigen.

Alternative Methoden

Wenn du kein Makro verwenden möchtest, kannst du auch die Filter-Funktion in Excel nutzen:

  1. Daten filtern: Gehe zu Daten > Filter.
  2. Bedingungen festlegen: Filtere die Spalte nach den Bedingungen, die du behalten möchtest.
  3. Zeilen löschen: Markiere die gefilterten Zeilen, die du löschen möchtest, und drücke Rechtsklick > Zeilen löschen.

Diese Methode ist besonders nützlich, wenn du manuell arbeiten möchtest.


Praktische Beispiele

  1. Beispiel 1: Löschen von Zeilen, die die Werte 10 oder 15 enthalten:

    Sub LoeschenT()
       Dim lngI As Long
       Application.ScreenUpdating = False
       For lngI = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
           If Cells(lngI, 1) = 10 Or Cells(lngI, 1) = 15 Then
               Rows(lngI).Delete
           End If
       Next lngI
       Application.ScreenUpdating = True
    End Sub
  2. Beispiel 2: Behalte nur Zeilen mit bestimmten Texten:

    Sub Behalten()
       Dim lngI As Long
       Application.ScreenUpdating = False
       For lngI = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
           If Not (InStr(1, Cells(lngI, 1), "Text1") > 0 Or InStr(1, Cells(lngI, 1), "Text2") > 0) Then
               Rows(lngI).Delete
           End If
       Next lngI
       Application.ScreenUpdating = True
    End Sub

Tipps für Profis

  • Nutze Application.Calculation = xlCalculationManual, um die Berechnung während des Löschens zu deaktivieren, und aktiviere sie danach wieder, um die Performance zu verbessern.
  • Verwende Range.SpecialCells(xlCellTypeBlanks).Delete, um leere Zeilen schnell zu entfernen.
  • Experimentiere mit der Select Case-Anweisung, um mehrere Bedingungen effizient zu prüfen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Bedingungen in einem Makro kombinieren? Du kannst die If-Anweisung oder Select Case verwenden, um mehrere Bedingungen zu kombinieren und die Zeilen entsprechend zu löschen.

2. Kann ich diese Methoden ohne VBA verwenden? Ja, du kannst die Filter-Funktion in Excel nutzen, um bestimmte Zeilen zu löschen, ohne ein Makro zu schreiben.

3. Was passiert, wenn ich versehentlich zu viele Zeilen lösche? Du kannst die Aktion mit Strg + Z (Rückgängig) wiederherstellen, solange du die Datei nicht gespeichert hast.

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