Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1204to1208
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

Löschen von Zeilen

Löschen von Zeilen
Zeilen
Moin Moin,
ich bin es mal wieder.
Ich benötige einen Code, der mir alle Zeilen löscht in dem in Spalte B eine "0" steht.
Die Tabelle ist nach Spalte B absteigend sortiert. Spalte 1 ist eine Überschrift.
Ich habe auch einen entsprechenden Code gefunden. Der Funzt auch
Aber: In der Tabelle sind mehrere Blätter und es gibt im jedem Blatt hunderte Zeilen mit einer "0" in Spalte B. Somit dauert der Code extrem lange. Ich möchte auch nur in bestimmten Blättern den Code ausführen, also nicht in allen. Z.B. M1&M2&M3 aber nicht M4. Gibt es eine bessere/schnellere Lösung?
Vielen Dank im Voraus!
Sub löschen()
Dim LoI As Long
Dim LoLetzte As Long
' letzte Zelle in Spalte A unabhängig von Version
Sheets("M2").Select
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows. _
Count)
On Error Resume Next
For LoI = LoLetzte To 1 Step -1
If Cells(LoI, 2)  "" And Cells(LoI, 2) = 0 Then Rows(LoI).Delete
Next
On Error GoTo 0
End Sub

Original Code

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Löschen von Zeilen
04.03.2011 19:36:58
Zeilen
Tut mir leid Sepp, daß ich mich nicht vernünftig gemeldet und bedankt habe.
Ich habe den Code noch um andere Funktionen erweitert, die nacheinander ablaufen.
Bis jetzt funzt alles. Der Code ist bestimmt nicht sehr schön aber er geht...
Wie gesagt, vielen Dank nochmal für deine Mühe und Hilfe.
Grüße Stefan
AW: Löschen von Zeilen
04.03.2011 19:38:43
Zeilen

Hallo Stefan,
weiß jetzt nicht von welchem Code du redest, aber egal.
Probier mal diese Version.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub loeschen()
  Dim objSh As Worksheet
  Dim rngDel As Range, rng As Range
  Dim strFirst As String
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
  End With
  
  For Each objSh In ThisWorkbook.Worksheets
    With objSh
      Select Case .Name
        Case "M1", "M2", "M3"
          Set rng = Nothing
          Set rngDel = Nothing
          strFirst = ""
          Set rng = .Columns(2).Find(What:=0, LookAt:=xlWhole, LookIn:=xlValues)
          If Not rng Is Nothing Then
            strFirst = rng.Address
            Do
              If rngDel Is Nothing Then
                Set rngDel = rng.EntireRow
              Else
                Set rngDel = Union(rngDel, rng.EntireRow)
              End If
              Set rng = .Columns(2).FindNext(rng)
            Loop While Not rng Is Nothing And strFirst <> rng.Address
          End If
          If Not rngDel Is Nothing Then rngDel.Delete
        Case Else
      End Select
    End With
  Next
  
  ErrExit:
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
  End With
  
  Set objSh = Nothing
  Set rngDel = Nothing
  Set rng = Nothing
End Sub


Gruß Sepp

Anzeige
AW: Löschen von Zeilen
04.03.2011 19:53:59
Zeilen
Mal wieder erste Klasse 1a+++
Es klappt einwandfrei. Besten Dank!
Grüße Stefan
AW: lernt endlichmal richtig Excel
05.03.2011 17:05:24
Daniel
dann habt ihr es auch viel leichter, in VBA schnelle Makros zu schreiben.
wer in Excel schnelle Makros schreiben will, sollte sich lieber auf die Excelfunktionen besinnen und Schleifen möglichst selten verwenden.
Möglichkeit 1: SUCHEN
dim Zelle1 as range
dim Zelle2 as range
set Zelle1 = Columns(2).find(what:=0, Lookat:=xlwhole, searchdirection:=xlnext)
Set Zelle2 = Columns(2).Find(what:=0, Lookat:=xlwhole, Searchdirection:=xlprevious)
Range(Zelle1, Zelle2).entireRow.Delete
Möglichkeit 2: ERSETZEN mit GEHE ZU - INHALTE (geht nicht, wenn in Spalte B Formeln stehen
With Columns(2)
.Replace 0, True
.Specialcells(xlcelltypeconstants, 4).EntireRow.Delete
End With
3. Möglichkeit: Autofilter
with activesheet.usedrange
.AutoFilter Field:=2, Criteria1:="0"
.offset(1,0).SpeciaclCells(xlcelltypevisible).entirerrow.delete
.Autofilter
end with

Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige