Anzeige
Archiv - Navigation
1760to1764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen löschen, wenn Wert in Spalte B

Zeilen löschen, wenn Wert in Spalte B
03.06.2020 12:31:20
Marc
Hallo,
ich verstehe nicht, warum das nicht funktioniert... Ich möchte gerne alle Zeilen, in der in der Spalte B NICHT der Wert 123456789 steht, löschen.
Dafür habe ich folgendes geschrieben:
Sub Zeilen_loeschen()
Dim i As Long
Dim letztezeile As Long
Sheets("Artikel").Select
letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To letztezeile
If Range("B" & i).Value  "123456789" Then
ActiveSheet.Rows(i & ":" & i).Delete
End If
Next
End Sub
Er löscht auch irgendwas, aber der Geier weiß was und warum....
Hier ist die Datei:
https://www.herber.de/bbs/user/137973.xlsm
Danke für einmal vom Schlauch heben...
LG
Marc

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

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen, wenn Wert in Spalte B
03.06.2020 12:41:36
MCO
Hallo Marc!
Lass mich raten:
Von 2 aufeinanderfolgenden Zeilen wird nur 1 gelöscht :-)
Ist logisch: Wenn du Zeile 9 löschst wird Zeile 10 zu Zeile 9 und der Zähler geht zur neuen Zeile 10
Wie verhindern?
Weg A
Lösche nicht die Zeilen sondern nur den Inhalt. Am Ende alle leeren Zellen des Bereiches löschen.
Müsste auch schneller durchlaufen.
ActiveSheet.Rows(i & ":" & i).clearcontents
am Ende:
Spalte auswählen, die sonst immer gefüllt ist
Set Rng = Range("B2:B" & letztezeile).SpecialCells(xlCellTypeBlanks)
Rng.EntireRow.Delete

Weg B
Zähle rückwärts:
For i = letztezeile to 2 step -1
Viel Erfolg!
Gruß, MCO
Anzeige
Danke für diese MEGA Erklärung!!!!
03.06.2020 14:30:04
Marc
Vielen Dank für diese Mega Erklärung!! Hab es nun vollumfänglich verstanden!
Danke, danke, danke!!
Marc
AW: Zeilen löschen, wenn Wert in Spalte B
03.06.2020 14:02:07
Daniel
HI
warum das nicht funktioniert und wie es besser geht, hat dir MCO schon erklärt.
generell sind Schleifen zum Löschen von Zeilen ungünstig, da aufwendig zu programmieren und langsam in der Ausführung.
es gibt in Excel mehrere Methoden, die besser sind:
  • Spaltenunterschiede

  • in deinem Fall gibt es sogar eine eigene Menüfunktion:
    1. selektiere die Spalte B
    2. aktiviere innerhalb dieser Selektion eine Zelle, die den Wert "123456789" enthält (aktive Zelle)
    3. klicke dann im Menü: Start - Bearbeiten - Inhalte auswählen - Spaltenunterschiede
    jetzt sollten alle Zellen markiert sein, die nicht "123456789" enthalten
    4. lösche dann dieses Zellen mit der Option "ganze Zeile"
    in VBA kann man das dann in eine einzige Progammzeile packen:
    ActiveSheet.UsedRange.Offset(1, 0).Columns(2).ColumnDifferences(Columns(2).Find(what:="123456789", lookat:=xlWhole)).EntireRow.Delete
    

  • Duplikate Entfernen

  • das Duplikate Entfernen löscht sehr schnell Zeilen aus größten Datenmengen. Daher verwende ich es bevorzugt, um generell Zeilen mit Bedingung zu löschen.
    die hierfür erforderlichen Duplikate erzeugt man per Formel in einer Hilfesspalte, dabei kennzeichnet man alle Zeilen, die gelöscht werden müssen mit der Zahl 0 und die die stehen bleiben sollen mit der Zeilennummer
    in deinem Fall würde das so aussehen:
    in die Zelle C2 kommt die Formel: =Wenn(B2=123456789;Zeile();0)
    in die Überschriftenzeile kommt ebenfalls die 0.
    dann kann man die mit 0 markierten Zeilen über das DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN mit der Hilfsspalte als Kriterium und der Option "keine Überschrift" löschen.
    das sieht als Code so aus:
    with activesheet.usedrange
    with .columns(columns.count + 1)
    .formulaR1C1 = "=IF(RC2=123456789,Row(),0)"
    .cells(1, 1).value = 0
    .entirerow.removeduplicates .column, xlno
    .clearcontents
    end with
    end with
    

    diesen Code kannst du für fast alle Fälle, in denen Zeilen mit Bedingung gelöscht werden sollen, anwenden und musst hierbei lediglich die Formel an die jeweilige Bedingung anpassen.
    den Rest des Codes kannst du übernehmen.
    Gruß Daniel
    Anzeige
    AW: Zeilen löschen, wenn Wert in Spalte B
    05.06.2020 23:16:00
    Thomas
    Hallo
    noch eine Frage an Daniel:
    Du schreibst:
    "4. lösche dann dieses Zellen mit der Option "ganze Zeile""
    Wie geht das?
    Gruß Tom
    AW: Zeilen löschen, wenn Wert in Spalte B
    09.06.2020 00:29:39
    Werner
    Hallo,
    Rechtsklick auf eine der ausgewählten Zellen - Zellen löschen - dann geht ein Fenster auf "Löschen" Ganze Zeile auswählen
    Gruß Werner
    AW: Zeilen löschen, wenn Wert in Spalte B
    12.06.2020 21:43:22
    Thomas
    Danke Werner. gefunden.
    AW: Zeilen löschen, wenn Wert in Spalte B
    04.06.2020 08:07:34
    Daniel
    das hier sollte auch funktionieren
    
    Sub loeschen()
    Sheets("Artikel").Select
    Dim i As Long
    Application.ScreenUpdating = False
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(i, 2)  "123456789" Then Rows(i).Delete
    Next i
    Application.ScreenUpdating = True
    End Sub
    

    Anzeige
    AW: Zeilen löschen, wenn Wert in Spalte B
    05.06.2020 23:10:16
    Thomas
    Hallo Daniel,
    wenn ich mich dazwischen melden darf:
    Dein letztes Makro Sub loeschen() war, glaube ich, das Nützlichste hier, nämlich das Zeile für Zeile löschen, aber von hinten!!! Das finde ich wichtig zu betonen.
    (Ohne dabei die anderen Beiträge schmälern zu wollen)
    Das Makro "Duplikate entfernen" it auch gut, funktioniert aber nur mit einem Punkt vor columns.count. Also so:
    "with .columns(.columns.count + 1)"
    sonst ist es die Spalte jenseits des rechten Endes der Excel-Welt.
    Auch das Beispiel mit "ColumnDifferences" ist cool. Habe noch nie was davon gehört oder gelesen, abe ich bin kein Masstab.
    Noch eine Frage zu diesem Einzeiler mit "ColumnDifferences". Warum funktioniert Intellisense bei "ActiveSheet." nicht?
    Gruß, Thomas
    Anzeige

    300 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige